【问题标题】:Using `with` in pyjade and Flask在 pyjade 和 Flask 中使用 `with`
【发布时间】:2015-02-01 00:10:21
【问题描述】:

我正在尝试转换此 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语法,我还是有点迷茫。

【问题讨论】:

    标签: flask pyjade


    【解决方案1】:

    我不怎么用jade或者pyjade,但是我用过jinja2和python 3.x。根据jade 和pyjade 文档,您拥有的不是有效的jade 语法:Jinja 的with statement 在jade 中不受支持,pyjade 也不支持在您的jade 模板中嵌入python 代码(另请参见Using python code in pyjade 示例)。

    因此,您必须使用不同的构造。这应该相当简单,因为with 只是为 with 语句的变量创建了一个内部范围;在此范围之外,with 变量不可见。仅当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 的使用让我觉得你没有看过玉文档,它没有提到这些关键字,并且清楚地表明它们是不需要的。正如他们所说,“RTFM”总是有帮助的,那么你的问题可以更具体。

    【讨论】:

    • 谢谢,这最终奏效了,帮助消除了我的一些困惑。我对 Flask 直接使用我的玉文件的想法还不满意。现在,我将采用愚蠢的方法,即使用玉文件编译带有 jinja 代码的 html 代码。这疯了吗?
    • @dramal 好的,请记住,在 SO 上关闭/投票让其他人知道答案很重要;否则请具体说明什么是不足的(您询问的方法似乎更像是一个单独的问题)。欢迎来到 SO!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多