如何使用FastAPI和HTML模板提交从下拉列表中选择的value
?
以下是我目前为止编写的应用程序代码:
from fastapi import FastAPI, Request, Form
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates/")
@app.get('/')
def read_form():
return 'hello world'
@app.get("/form")
def form_post(request: Request):
result = "Select your name"
return templates.TemplateResponse('form.html', context={'request': request, 'result': result})
@app.post("/form")
def form_post(request: Request, result = Form(...)):
return templates.TemplateResponse('form.html', context={'request': request, 'result': result})
下面是HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sample Form</title>
</head>
<body>
<form method="post">
<select name="names" id="names">
<option value="n1">Name 1</option>
<option value="n2">Name 2</option>
<option value="n3">Name 3</option>
<option value="n5">Name 4</option>
</select>
<input type="submit" value="Submit">
</form>
<p>Result: {{ result }}</p>
</body>
</html>
下面是错误消息:
{"detail":[{"loc":["body","result"],"msg":"field required","type":"value_error.missing"}]}
目标是选择一个name
,单击submit
,然后将其显示在下面。
1条答案
按热度按时间laik7k3q1#
您需要确保在表单中包含
action
属性,该属性指定在提交表单时将form-data
发送到何处(也请参见W3schools<form>
tag docs)。此外,在用于创建下拉列表的<select>
元素中,请确保使用相同的name
来定义端点中的Form
参数。根据W3schools<select>
tag docs:表单提交后需要
name
属性来引用表单数据(如果省略name
属性,则不会提交下拉列表中的数据)。<select>
中的每个<option>
元素都应具有一个value
属性,其中包含在选择该选项时要提交给服务器的数据值。如果不包括value
属性,该值默认为元素中包含的文本。您可以在<option>
元素上包含selected
属性,使其在首次加载页面时默认处于选中状态。工作示例
模板/索引. html