python 使用Jinja2模板在HTML文本区域中显示FastAPI响应(元组)

xvw2m8pv  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(224)

下面是我的FastAPI后端:

主文件名.py

from typing import Optional
from fastapi import FastAPI, Request, Form
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory='./')

@app.get("/")
def index():
    return "Hello World"

@app.get("/item/{text}")
def get_item(text: str):
    return {"result": tuple(['Hi', 'hello'])}

@app.get("/form")
def form(request: Request):
    result = ""
    return templates.TemplateResponse('form.html', context={'request': request, 'result': result})

@app.post("/form")
def form(request: Request, text: str=Form(...)):

    result = ['Hello', 'Hi', 'Bye'] # to simplify the example
    return templates.TemplateResponse('form.html', context={'request': request, 'result': tuple(result)})

下面是Jinja2模板:

表单.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Small example</title>
  </head>
  <body>
    <form method="post">
      <label for="text">Input text:</label>
      <br>
      <textarea id="text" name="text" rows="12" cols="50"></textarea>
      <br/>
      <input type="submit" value="Submit">
    </form>
    <br></br>
    <form method="post">
      <label for="text">Result:</label>
      <br>
      <textarea id="result" name="result" rows="12" cols="50"> {{ result }} </textarea>
      <br/>
    </form>
  </body>
</html>

在这里,我在文本区域中得到的结果为:('Hello', 'Hi', 'Bye') .
我需要的是在 result 文本区域中逐行显示它:

Hello. 

Hi. 

Bye.
sqougxex

sqougxex1#

选项1

您可以循环遍历元组,如下所示:

<textarea id="result" name="result" rows="12" cols="50"> 
    {% for i in result %}
        {{ i }}
    {% endfor %}
</textarea>

选项2

你也可以将aobve写在一行中,因为上面的代码看起来并没有将文本向左对齐,除非你将整个Python代码移到左边。使用下面的代码和&#13;&#10;,如here所述,在项目之间添加换行符。

<textarea id="result" name="result" rows="12" cols="50">{% for i in result %}{{ i }}&#13;&#10;{% endfor %}</textarea>

相关问题