使用pyjade中的python代码



我正在尝试使用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 ""))

最新更新