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

2024-04-20 09:38:50 发布

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

我是一个非常年轻的程序员,我正在尝试用Python做一些事情,但是我卡住了。我在Couchdb(使用python Couchdb library&Flask framework)中有一个用户名(即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模板中的一个选项下拉列表中。我想我需要一个函数,但我是一个绿色程序员。

非常感谢你的帮助。


Tags: com模板jinja2列表fordbdoc电子邮件
2条回答
lista = [ x for x in db ] # watch out for big databases, you can run out of memory

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

class User(Document):
    email = TextField()

您可以使用用户类的静态方法load

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

现在您可以这样做:

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

但你在烧瓶里用,所以,在你看来你可以 此模板的用户列表使用以下内容:

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>

另外,你用的是烧瓶延长线吗?它可能有助于抽象出一些低级couchdb代码:http://packages.python.org/Flask-CouchDB/

免责声明:上面的代码没有经过测试,但是应该可以正常工作。我不太了解库奇德,但我对烧瓶很熟悉。另外,我显然没有在这里包含完整的Flask/CouchDB应用程序,因此缺少一些代码。

相关问题 更多 >