如何在Python中将列表作为变量返回并在Jinja2中使用?

Han*_*ver 11 python jinja2 flask

我是一个非常年轻的程序员,我正在尝试用Python做一些事情,但我被困住了.我有一个Couchdb用户列表(使用python couchdb库和Flask框架),他们有一个用户名(即_id)和电子邮件.我想在jinja2模板的选择框中使用电子邮件地址列表.

我的第一个问题是如何访问电子邮件地址.如果我做:

for user in db:
    doc = db[user]
    emails = doc['email']
    print options
Run Code Online (Sandbox Code Playgroud)

我明白了:

email@domain.com
otheremail@otherdomain.com
yetanotheremail@yetanotherdomain.com
Run Code Online (Sandbox Code Playgroud)

所以我可以得到我的电子邮件列表.但是,我的残酷经验出现的地方是我不知道如何使用它们.该列表仅存在于for循环中.如何将该列表作为可用的变量列表返回?然后,如何在选项下拉菜单中将该列表显示在我的jinja2模板中.我想我需要一个功能,但我是一个绿色程序员.

非常感谢帮助.

Jos*_*osh 21

假设你有一个模型,如:

class User(Document):
    email = TextField()
Run Code Online (Sandbox Code Playgroud)

您可以使用loadUser类的静态方法

users = [User.load(db, uid) for uid in db]
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

for user in users:
    print user.id, user.email  
Run Code Online (Sandbox Code Playgroud)

但是你在烧瓶中使用它,所以在你的视图中你可以使用以下内容将这个用户列表发送到你的模板:

from flask import render_template
@app.route("/users")
def show_users():
    users = [User.load(db, uid) for uid in db]
    return render_template('users.html', users=users)
Run Code Online (Sandbox Code Playgroud)

现在,在users.htmljinja2模板中,以下内容将输出每个用户电子邮件的下拉列表框

<select>
{% for user in users %}
    <option value="{{ user.id }}">{{ user.email }}</option>
{% endfor %}
</select>
Run Code Online (Sandbox Code Playgroud)

另外,您使用的是Flask-CouchDB扩展吗?它可能有助于抽象出一些低级的couchdb编码:http://packages.python.org/Flask-CouchDB/

免责声明:上述代码未经过测试,但应该可以正常使用.我对CouchDB了解不多,但我对Flask很熟悉.此外,我显然没有在这里包含完整的Flask/CouchDB应用程序,因此缺少一些代码.