Flask 在pyjade和烧瓶中使用“with”

Flask 在pyjade和烧瓶中使用“with”,flask,pyjade,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 %} {% end

我正在尝试转换这个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 %}

但是messages=get\u flashed\u消息只会打印到页面上。对于何时使用jade语法以及何时使用flask/Jinja2语法,我仍然有点困惑。

我不太使用jade或pyjade,但我在Python3.x中使用了Jinja2。基于jade和pyjade文档,您拥有的是无效的jade语法:jade中不支持Jinja,pyjade也不支持在您的jade模板中嵌入python代码,请参见示例

因此,您必须使用不同的构造。这应该相当简单,因为with仅仅为with语句的变量创建了一个内部范围;在此范围之外,with变量不可见。仅当消息可以是无而不是空列表时,才需要if消息。因此,请尝试以下方法:

if messages
    for message in get_flashed_messages()
        .alert.alert-danger(role="alert")
            Error: {{message}}
我假设您使用的是Python2.7,因为在Python3.4中,甚至pyjade网站上的基本示例都不起作用


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

谢谢,这最终起到了作用,帮助我消除了一些困惑。我还不太适应直接用我的玉文件工作的想法。现在,我将使用一种愚蠢的方法,即使用jade文件编译包含jinja代码的html代码。这疯了吗?@dramal Ok请记住,打开,因此关闭/向上投票答案对于其他人了解答案很重要;否则,请具体说明什么是不足的。你所问的方法似乎更像是一个单独的问题。欢迎来到SO!
if messages
    for message in get_flashed_messages()
        .alert.alert-danger(role="alert")
            Error: {{message}}