在pyjade和Flask中使用`with`

时间:2015-02-01 00:10:21

标签: flask pyjade

我正在尝试转换此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语法,我仍然感到有点困惑。

1 个答案:

答案 0 :(得分:0)

我没有太多使用jade或pyjade,但我使用了jinja2和python 3.x.基于jade和pyjade文档,你所拥有的不是有效的jade语法:jade不支持Jinja&#39; with statement,pyjade也不支持在你的jade模板中嵌入python代码(另请参阅示例{{ 3}})。

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

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

我认为你使用的是python 2.7,因为使用python 3.4甚至pyjade网站的基本示例都不起作用。

但是你使用endfor等等让我觉得你没有看过玉器文档,它没有提及这些关键字,并清楚地表明它们不是必需的。正如他们所说,&#34; RTFM&#34;,它总是有帮助,那么你的问题可以更具体。