我正在尝试使用pyjade生成一个列表,如下所示:
ul
- for i, (label, link) in enumerate(tabs)
li(class="selected" if i == selected_index else "")
a(href=link)= label
但是我看到了这个错误:
UndefinedError:'enumerate'未定义
我必须将蟒蛇代码嵌入Jade中。什么是正确的方法?
答案 0 :(得分:4)
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
)
答案 1 :(得分:1)
没有; pyjade不允许将任意python代码嵌入到jade中。请改用jade的语法。
答案 2 :(得分:1)
您应该使用向使用pyjade编译jade文件的tamplate语言使用的模板环境添加函数的方法。
对于使用jinja的Flask,这应该放在你的__init__.py中:
app.jinja_env.globals.update(enumerate=enumerate)
答案 3 :(得分:0)
你可以用pypugjs(pyjade的继承者)来做到这一点
li(class=("selected" if i == selected_index else ""))