如何用Flask填充选定标记?

2024-05-14 22:39:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图访问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 %}

Tags: form模板idjson列表forreturnpost
1条回答
网友
1楼 · 发布于 2024-05-14 22:39:40

这里有一些错误:

首先,当调用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>

有关详细信息,请参见rendering part of the tutorial,或Jinja2 documentation

相关问题 更多 >

    热门问题