【问题标题】:Get a reference to a list in a python module and iterate over it [duplicate]获取对python模块中列表的引用并对其进行迭代[重复]
【发布时间】:2016-01-22 16:28:42
【问题描述】:

我正在尝试创建一个包含多个表单页面的小站点。在这些表单中,我想添加一些下拉列表并使用存储在我项目中的模块中的列表来支持内容

这些列表基本上被用作枚举(我被困在 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 模块的引用来工作。

如何在不明确将其添加到模型的情况下向 Jinja 公开 Enums 模块和其中的列表?

【问题讨论】:

标签: python python-3.x flask jinja2


【解决方案1】:

要引用模板中的某些内容,您需要将其传递给模板。这可以通过以下两种方式之一完成。

首先可以通过render_template传入:

from somewhere import something

@app.route('/')
def index():
    return render_template('index.html', something=something)

但是,如果您想对每个模板都执行此操作,这可能会变得繁琐且容易出错。要为每个模板提供一些东西,您可以使用context processor

from somewhere import something

@app.context_processor
def inject_things():
    return {'something': something}

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2014-03-21
    • 1970-01-01
    • 2020-01-05
    相关资源
    最近更新 更多