获取对 python 模块中列表的引用并对其进行迭代
Get a reference to a list in a python module and iterate over it
我正在尝试构建一个包含多个带有表单的页面的小网站。在这些表格中,我想添加一些下拉菜单并使用存储在我的项目模块中的列表为内容提供支持
这些列表基本上被用作枚举(我坚持使用 Python 3.4,显然 Python 在没有枚举支持的情况下已经做到了这一点)
我不想将每个可能的列表作为模型的一部分传递(效率低下),但相反地跟踪在何处使用了哪些列表并确保模型被适当地填充似乎是如此琐碎的事情有很多麻烦。
所以...我想编写一个宏,它将获取一个列表名称并为其生成一个下拉列表。我的初步尝试:
{% macro dropdown(name, selected='') -%}
<select name="{{ name }}">
{% for item in Server.Enums.__dict__({{name}}) %}
<option>{{item}}</option>
{% endfor %}
</select>
{%- endmacro %}
失败,因为我无法获得 Enums 模块的引用。
如何将 Enums 模块和其中的列表公开给 Jinja 而无需将其显式添加到模型中?
要在模板中引用某些内容,您需要将其传递给模板。这可以通过以下两种方式之一完成。
首先可以通过render_template
传入:
from somewhere import something
@app.route('/')
def index():
return render_template('index.html', something=something)
但是,如果您想对每个模板都执行此操作,这可能会变得很麻烦并且 error-prone。要为每个模板提供一些内容,您可以使用 context processor.
from somewhere import something
@app.context_processor
def inject_things():
return {'something': something}
我正在尝试构建一个包含多个带有表单的页面的小网站。在这些表格中,我想添加一些下拉菜单并使用存储在我的项目模块中的列表为内容提供支持
这些列表基本上被用作枚举(我坚持使用 Python 3.4,显然 Python 在没有枚举支持的情况下已经做到了这一点)
我不想将每个可能的列表作为模型的一部分传递(效率低下),但相反地跟踪在何处使用了哪些列表并确保模型被适当地填充似乎是如此琐碎的事情有很多麻烦。
所以...我想编写一个宏,它将获取一个列表名称并为其生成一个下拉列表。我的初步尝试:
{% macro dropdown(name, selected='') -%}
<select name="{{ name }}">
{% for item in Server.Enums.__dict__({{name}}) %}
<option>{{item}}</option>
{% endfor %}
</select>
{%- endmacro %}
失败,因为我无法获得 Enums 模块的引用。
如何将 Enums 模块和其中的列表公开给 Jinja 而无需将其显式添加到模型中?
要在模板中引用某些内容,您需要将其传递给模板。这可以通过以下两种方式之一完成。
首先可以通过render_template
传入:
from somewhere import something
@app.route('/')
def index():
return render_template('index.html', something=something)
但是,如果您想对每个模板都执行此操作,这可能会变得很麻烦并且 error-prone。要为每个模板提供一些内容,您可以使用 context processor.
from somewhere import something
@app.context_processor
def inject_things():
return {'something': something}