一尘不染

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

flask

我正在尝试用Python做某事,但我陷入了困境。我在Couchdb中有一个用户列表(使用python benchdb库和Flask框架),这些用户具有用户名(即_id)和电子邮件。我想在jinja2模板的选择框中使用电子邮件地址列表。

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

for user in db:
    doc = db[user]
    emails = doc['email']
    print options

我得到:

email@domain.com
otheremail@otherdomain.com
yetanotheremail@yetanotherdomain.com

这样我就可以获得我的电子邮件列表。但是我残酷的经验不足之处在于我不知道该如何使用它们。该列表仅存在于for循环中。如何将该列表作为可用变量列表返回?然后,如何在我的jinja2模板的选项下拉列表中显示该列表。


阅读 533

收藏
2020-04-07

共1个答案

一尘不染

假设你有一个模型,例如:

class User(Document):
    email = TextField()

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

users = [User.load(db, uid) for uid in db]

现在你可以执行以下操作:

for user in users:
    print user.id, user.email  

但是你在flask中使用它,因此,在你的视图中,可以使用以下方式将此用户列表发送到模板:

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)

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

<select>
{% for user in users %}
    <option value="{{ user.id }}">{{ user.email }}</option>
{% endfor %}
</select>
2020-04-07