Python 烧瓶无法导入枚举?未定义错误:';枚举';是未定义的
我只是在HTML页面中编写此代码Python 烧瓶无法导入枚举?未定义错误:';枚举';是未定义的,python,flask,jinja2,Python,Flask,Jinja2,我只是在HTML页面中编写此代码 {% for i, val in enumerate(['a', 'b', 'c']) %} <td> {{ val }} </td> {% endfor %} UndefinedError: 'enumerate' is undefined {%fori,val在枚举(['a','b','c'])中的百分比] {{val}} {%endfor%} UndefinedError:“枚举”未定义 因此,
{% for i, val in enumerate(['a', 'b', 'c']) %}
<td>
{{ val }}
</td>
{% endfor %}
UndefinedError: 'enumerate' is undefined
{%fori,val在枚举(['a','b','c'])中的百分比]
{{val}}
{%endfor%}
UndefinedError:“枚举”未定义
因此,Flask不支持enumerate?Flask使用Jinja2呈现模板,Jinja2具有类似的python语法,但它不是python 你能做什么?在python代码中:
my_dict = enumerate(some_list)
然后,在呈现模板时,将dict发送给模板:
render_template('page.html', my_dict=my_dict)
正如或段所说,金甲2有自己的语言。看起来像Python,但不是Python。因此Python
enumerate
内置函数不是Jinja2模板引擎的一部分。但是,您可以使用一些替代方案:
如果要枚举列表中的项目,可以使用loop特殊变量:
>>> from jinja2 import Template
>>> t1 = """
... {% for val in ['a', 'b', 'c'] %}
... <td>
... {{ loop.index0 }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t1).render()
Flask允许通过将变量自动注入模板的上下文中。因此,如果您希望enumerate
内置函数可用于所有模板,这可能是一个不错的解决方案:
@app.context_processor
def inject_enumerate():
return dict(enumerate=enumerate)
感谢Sean Vieira的建议。还有一个选择是注册一个上下文处理器,并在Jinja环境中从Python中公开您想要的内容。很好的列表,顺便说一句。@SeanVieira很好的解决方案。我将该选项添加到列表中。希望这是你的意思。谢谢你的回答。我挣扎着去理解它——我需要足够的时间去弄清楚什么是
Template().render(某物)
。所以还有改进的余地。谢谢大家的解决方案。值得一提的是,loop.index
也存在于index1
而不是loop.index0
于0
开始。非常感谢。但我认为在枚举的情况下,loop.index0
可以实现这一点。
>>> t3 = """
... {% for i, val in enumerate(['a', 'b', 'c']) %}
... <td>
... {{ i }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t3).render(enumerate=enumerate)
@app.context_processor
def inject_enumerate():
return dict(enumerate=enumerate)