【问题标题】:How to write a multiline Jinja statement如何编写多行 Jinja 语句
【发布时间】:2020-01-04 04:46:32
【问题描述】:

我的 Jinja 模板中有一个 if 语句,出于可读性原因,我想将它写在 multines 中。考虑案例

{% if (foo == 'foo' or bar == 'bar') and (fooo == 'fooo' or baar == 'baar') etc.. %}

【问题讨论】:

    标签: jinja2


    【解决方案1】:

    根据文档:https://jinja.palletsprojects.com/en/2.10.x/templates/#line-statements 您可以使用多行语句,只要代码周围有括号/括号。示例:

    {% if ( (foo == 'foo' or bar == 'bar') and 
            (fooo == 'fooo' or baar == 'baar') ) %}
        <li>some text</li>
    {% endif %}
    

    编辑:使用line_statement_prefix = '#'* 代码如下所示:

    # if ( (foo == 'foo' or bar == 'bar') and 
           (fooo == 'fooo' or baar == 'baar') )
        <li>some text</li>
    # endif
    

    *这是一个如何在Environment 中指定line_statement_prefix 的示例:

    from jinja2 import Environment, PackageLoader, select_autoescape
    env = Environment(
        loader=PackageLoader('yourapplication', 'templates'),
        autoescape=select_autoescape(['html', 'xml']),
        line_statement_prefix='#'
    )
    

    或者使用 Flask:

    from flask import Flask
    app = Flask(__name__, instance_relative_config=True, static_folder='static')
    app.jinja_env.filters['zip'] = zip
    app.jinja_env.line_statement_prefix = '#'
    

    【讨论】:

    • 你试过了吗?很确定你会得到:expected token 'end of statement block', got 'pass' 运行这个。同样,当用set 或常规分配替换pass 时,我想你会得到expected token 'end of statement...。相反,您必须将每个语句分别包装在 {% %} 中,例如:{% if ... %} {% set x = 1 %} {% endif %}
    • 我想您的意思是将%} 放在pass 上方,就像您使用# 语法一样。
    • @timdiels:迟来的感谢 cmets。我更正了示例并更新了链接。
    猜你喜欢
    • 2010-10-29
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多