Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Flask填充select标记?_Python_Flask - Fatal编程技术网

Python 如何使用Flask填充select标记?

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

我试图访问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 %}
{%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吗??;-)