【问题标题】:Using python code in pyjade在pyjade中使用python代码
【发布时间】:2013-04-03 04:52:50
【问题描述】:

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

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

但我看到了这个错误:

UndefinedError: 'enumerate' 未定义

我一定是错误地将 python 代码嵌入到 Jade 中。这样做的正确方法是什么?

【问题讨论】:

  • 查看the docs for pyjade,我没有看到可以直接嵌入 Python 的示例......因为看起来 pyjade 主要充当 Jade 模板语法的某种包装器或解析器。是否可以尝试使用foreach 循环as described in the Jade docs
  • 哦!来自 scalade,我认为 pyjade 允许您嵌入 python 代码,因为 scalade 允许您嵌入 scala 代码。 pyjade 实际上支持任意 javascript 表达式吗?还是只挑出几个转换成等效的 Python 模板?
  • one of the examples in the pyjade docs好像可以在usual Jade Template Syntax way中嵌入JavaScript;在这种情况下,我认为您不必担心 JavaScript 的 Python 方面。
  • 您要编译到哪种目标语言?此外,问题似乎在于 enumerate 不在模板环境中。

标签: python pug pyjade


【解决方案1】:

Jade 使用我所说的“隐式枚举”——它通过添加一个变量 i 来枚举列表中的值,而不是解包的值:for item, i in list_like(对于字典,您可以执行 @987654323 @)

下面显示的是您使用元组解包和“隐式枚举”一起使用的示例,使用 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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你应该使用在你编译jade文件的模板语言使用的模板环境中添加函数的方式使用pyjade。

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

      app.jinja_env.globals.update(enumerate=enumerate)
      

      【讨论】:

        【解决方案4】:

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

        li(class=("selected" if i == selected_index else ""))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多