在pyjade中使用python代码

时间:2013-04-03 04:52:50

标签: python pug pyjade

我正在尝试使用pyjade生成一个列表,如下所示:

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

但是我看到了这个错误:

  

UndefinedError:'enumerate'未定义

我必须将蟒蛇代码嵌入Jade中。什么是正确的方法?

4 个答案:

答案 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 ""))