我正在尝试使用pyjade生成一个列表,如下所示:
ul
- for i, (label, link) in enumerate(tabs)
li(class="selected" if i == selected_index else "")
a(href=link)= label
但是我看到这个错误:
UndefinedError: 'enumerate' is undefined
我一定是嵌入python代码到翡翠错误。正确的做法是什么?
Jade使用了我所说的"隐式枚举"——它仅仅通过添加一个变量i
来枚举列表中的值,而不是要解包的值:for item, i in list_like
(对于字典,您可以执行for key, val in dict_like
)
下面显示的是使用元组解包和"隐式枚举"的示例,使用PyJade 2.0.2
进行测试- var selected_index = 0
- var tabs = [('hello', '/world'), ('citizens', '/please/respect_your_mother'), ('thank_you', '/bye')]
ul
// unpack `tabs` and tack on the variable `i` to hold the current idx
for label, link, i in tabs
li(class="selected" if (i == selected_index) else "")
a(href="#{link}") #{label}
注意:正如在"标准"Jade代码中更常见的那样,在撰写本文时,PyJade不支持NOT赋值的三元操作符。(variable= (condition)? value_if_true : value_if_false
)
不;Pyjade不允许在jade中嵌入任意python代码。请使用jade的语法
您应该使用使用pyjade编译jade文件的模板语言所使用的方式向模板环境中添加函数。
对于使用jinja的Flask,这应该放在__init__.py中,如下所示:
app.jinja_env.globals.update(enumerate=enumerate)
你可以使用pypugjs (pyjade的后继版本)
li(class=("selected" if i == selected_index else ""))