簡體   English   中英

如何使用Flask填充選擇標記?

[英]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>

有關詳細信息,請參閱本教程渲染部分Jinja2文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM