4

I'm trying to generate a list using pyjade, like so:

ul
  - for i, (label, link) in enumerate(tabs)
    li(class="selected" if i == selected_index else "")
      a(href=link)= label

But I see this error:

UndefinedError: 'enumerate' is undefined

I must be embedding python code into Jade wrong. What's the right way to do this?

4

4 回答 4

4

Jade 使用我所说的“隐式枚举”——它通过简单地添加一个变量来枚举列表中的值, , i,而不是要解包的值:(for item, i in list_like对于 dicts 你可以做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 不支持三元运算符进行赋值。( variable= (condition)? value_if_true : value_if_false)

于 2013-06-13T18:31:27.140 回答
1

您应该使用将函数添加到模板环境的方式,该模板环境由您编译的jade文件使用的模板语言使用pyjade。

对于使用 jinja 的 Flask,这应该放在你的 __init__.py 中:

app.jinja_env.globals.update(enumerate=enumerate)
于 2014-04-23T07:53:35.307 回答
1

不; pyjade 不允许将任意 python 代码嵌入到玉中。改用jade的语法。

于 2013-04-03T19:12:03.943 回答
0

你可以用pypugjs(pyjade的继任者)做到这一点

li(class=("selected" if i == selected_index else ""))
于 2018-01-12T11:35:25.773 回答