我试图访问python中的JSON对象列表(来自mongo),以使用flask模板填充下拉列表。随后,我需要访问选定的项目。我很难得到这个列表。这是我的python代码和模板。有人能指点我正确的方向吗?我找不到关于如何用这些模板填充dd列表的好文档。
Python:
@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 %}
这里有一些错误:
首先,当调用
render_template('chooser.html')
时,永远不会向模板呈现过程传递任何参数。默认情况下,如果找不到引用的属性,Jinja2不会出错,因此不会得到错误消息。基本上,对于模板中的代码,如下所示:这个for循环的内部从未呈现,因为您从未指定
option_list
是什么。在本例中,Jinja2将其默认为空字符串,然后基本上循环空字符串的字符(这当然意味着for循环的内部永远不会运行)。因此,您需要指定模板
option_list
的值是什么:另一个问题是,由于for循环的位置,您的HTML将被弄乱:
我想你想做的是:
有关详细信息,请参见rendering part of the tutorial,或Jinja2 documentation。
相关问题 更多 >
编程相关推荐