我尝试动态创建带有复选框的网络表单,并使用用户选择填充列表。例如,如果用户要从表单中选择test1和test2,我希望在[' test1',' test2']的python中有一个列表。
我正在使用带有Jinja2和Python的Flask。但是,当我提交表单时,我会收到400条消息(错误请求)。
以下是相关的Python代码。
from flask import Flask, render_template, request, redirect
CASES = ['test1', 'test2', 'test3', 'test4']
@app.route("/")
def template_test():
return render_template('template.html', title="Home")
@app.route("/TestCases")
def TestCases():
return render_template('testcases.html', cases=CASES, title="Test Cases")
@app.route("/info", methods=['POST'])
def getinfo():
if request.method == 'POST':
test = request.form['checks']
print test
return redirect('/')
else:
return redirect('/')
以下是模板中的相关html代码(testcases.html)。
<form action="info" method="post" name="checks">
{% for c in cases %}
<input type="checkbox" name={{c}} value='checks'> {{c}}<br>
{% endfor %}
<br>
<input type="submit" value="Submit">
我不是python的新手,但这是我第一次尝试使用Flask和Jinja2。
答案 0 :(得分:1)
提交的表单数据中没有checks
,因为没有名为<input>
的{{1}}元素。要查看打印的复选框,请尝试:
"checks"
或
print request.form.keys()
调试表单子的一种方法是使用httpbin.org提供的服务,如下所示:
for k,v in request.form.items():
print k, v
当我选择几个复选框时,我得到以下结果。请注意,每个<form action="http://httpbin.org/post" method="post" name="checks">
元素都会生成<input>
的独特成员。
form
一种可能的解决方案是修改模板和应用。
模板:
{
"args": {},
"data": "",
"files": {},
"form": {
"test1": "checks",
"test3": "checks"
},
"headers": {
... # Deleted for brevity
}
应用程式:
<input type="checkbox" value="{{c}}" name="checks"> {{c}}<br>