Python 如何使用Flask填充select标记?
我试图访问python中的JSON对象列表(来自mongo),以使用flask模板填充下拉列表。随后,我需要访问所选项目。我很难填充列表。这是我的python代码和模板。谁能给我指出正确的方向吗?我还没有找到关于如何用这些模板填充dd列表的好文档 PYTHON:Python 如何使用Flask填充select标记?,python,flask,Python,Flask,我试图访问python中的JSON对象列表(来自mongo),以使用flask模板填充下拉列表。随后,我需要访问所选项目。我很难填充列表。这是我的python代码和模板。谁能给我指出正确的方向吗?我还没有找到关于如何用这些模板填充dd列表的好文档 PYTHON: @app.route('/page', methods=["GET", "POST"]) @login_required def chooser(): # Option list returns a list of JSON o
@app.route('/page', methods=["GET", "POST"])
@login_required
def chooser():
# Option list returns a list of JSON objects
option_list = get_options(g.user)
# {u'_id': ObjectId('52a347343be0b32a070e5f4f'), u'optid': u'52a347343be0b32a070e5f4e'}
# for debugging, checks out ok
print option_list
# Get selected id & return it
if request.form['submit'] == 'Select':
optid = o.optid
resp = 'You chose: ', optid
return Response(resp)
return render_template('chooser.html')
HTML模板:
{% extends "layout.html" %}
{% block content %}
<h2>Chooser<h2>
<h3><table><form action="" method="POST">
<td>
<label>Select :</label>
<select name="option" width="300px">
{% for o in option_list %}
<option name="{{ o.optid }}" SELECTED>{{ o.optid }}</option>
</select>
</td>
<td>
<input class="button1" type="submit" value="Select">
</td>
{% endfor %}
</form></table><h3>
</div>
{% endblock content %}
{%extends“layout.html”%}
{%block content%}
选择者
选择:
{选项_列表%]中的o的百分比}
{{o.optid}}
{%endfor%}
{%endblock内容%}
这里有一些地方不对劲:
首先,当您调用render\u template('chooser.html')
时,您永远不会向模板呈现过程传递任何参数。默认情况下,如果未找到引用的属性,Jinja2不会出错,因此不会收到错误消息。基本上,对于模板中如下所示的代码:
{% for o in option_list %}
....
{% endfor %}
因为您从未指定选项\u列表
是什么,所以此for循环的内部永远不会被渲染。在本例中,Jinja2将默认为空字符串,然后实际上是在空字符串的字符上循环(这当然意味着for循环的内部永远不会运行)
因此,您需要指定模板选项列表
的值:
return render_template('chooser.html', option_list=option_list)
另一个问题是,由于您将for循环放在何处,您的HTML将被弄乱:
<select name="option" width="300px">
{% for o in option_list %}
<option value="{{ o.optid }}" SELECTED>{{ o.optid }}</option>
</select>
</td>
<td>
<input class="button1" type="submit" value="Select">
</td>
{% endfor %}
{选项_列表%]中的o的百分比}
{{o.optid}}
{%endfor%}
我想你想做以下几件事:
<select name="option" width="300px">
{% for o in option_list %}
<option value="{{ o.optid }}" SELECTED>{{ o.optid }}</option>
{% endfor %}
</select>
</td>
<td>
<input class="button1" type="submit" value="Select">
</td>
{选项_列表%]中的o的百分比}
{{o.optid}}
{%endfor%}
有关更多信息,请参阅或。此处的术语有点混乱。从技术上讲,您访问的是JSON对象,但这只是MongoDB传输数据方式的一部分。结果被序列化到Python字典中,您正在使用这些字典。通过说您正在使用JSON对象,您让人觉得您想要使用Javascript(实际上使用JSON对象)填充
标记。另外,您不是在访问列表,而是在尝试创建它。我已经更改了标题以反映此信息。谢谢Mark-这为我澄清了这一点。这很简单,因为我错过了传递对象列表。我不知道为什么我以前没有看到它。我可以把它设为+10吗??;-)