在 pyjade 和 Flask 中使用 `with`

Using `with` in pyjade and Flask

我正在尝试转换这个 html

{% with messages = get_flashed_messages() %}
  {% if messages %}
    {% for message in messages %}
    <div class="alert alert-danger" role="alert">
      Error: {{ message }}
    </div>
    {% endfor %}
  {% endif %}
{% endwith %}

给玉。我试过了

with messages = get_flashed_messages()
    if messages
        for message in messages
            .alert.alert-danger(role="alert")
                Error: {{message}}
        endfor
    endif
endwith

但是 "messages = get_flashed_messages()" 只是打印到页面上。我对何时使用 jade 语法以及何时使用 flask/Jinja2 语法仍然有些困惑。

我不常使用 jade 或 pyjade,但我使用过 jinja2 和 python 3.x。根据 jade 和 pyjade 文档,您所拥有的是无效的 jade 语法:Jinja 的 with statement is not supported in jade nor does pyjade support embedding python code in your jade template (see also for example Using python code in pyjade)。

因此您必须使用不同的结构。这应该相当简单,因为 with 只是为 with 语句的变量创建一个内部范围;在此范围之外,with 变量不可见。仅当 messages 可以是 None 而不是空列表时才需要 "if messages"。所以尝试这样的事情:

if messages
    for message in get_flashed_messages()
        .alert.alert-danger(role="alert")
            Error: {{message}}

我假设您使用的是 python 2.7,因为对于 python 3.4,即使是来自 pyjade 网站的基本示例也不起作用。

但是你使用 endfor 之类的让我觉得你没有看过 jade 文档,它没有提到这些关键字并且清楚地表明它们是不需要的。所以正如他们所说,"RTFM",它总是有帮助的,那么你的问题可以更具体。