[英]How can I populate data from a model in Flask Select Dropdown?
[英]How do I populate a select tag with Flask?
我試圖訪問python中的JSON對象列表(來自mongo),使用flask模板填充下拉列表。 隨后,我需要訪問所選項目。 我很難獲得填充列表。 這是我的python代碼和模板。 誰能指出我正確的方向? 我無法找到有關如何使用這些模板填充dd列表的良好文檔。
蟒蛇:
@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 o in option_list %}
....
{% endfor %}
永遠不會呈現此for循環的內部因為您從未指定option_list
。 在這種情況下,Jinja2將它默認為空字符串,然后你基本上循環空字符串的字符(這當然意味着for循環的內部永遠不會運行)。
因此,您需要指定模板option_list
的值是什么:
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 %}
我想你想做以下事情:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.