如何编写多行Jinja语句

76

我在Jinja模板中有一个if语句,为了可读性我想将其写成多行。考虑以下情况:

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

123
根据文档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 = '#'

1
你试过这个吗?我很确定当你运行这段代码时会得到:expected token 'end of statement block', got 'pass'。同样地,如果将 pass 替换为 set 或常规赋值,我认为你会得到 expected token 'end of statement...。相反,你需要分别在每个语句中使用 {% %} 进行包装,例如:{% if ... %} {% set x = 1 %} {% endif %} - Tim Diels
我想你的意思是将 %} 放在 pass 上面,就像你用 # 语法一样。 - Tim Diels
@timdiels:晚了点,感谢您的评论。我已经更正了示例并更新了链接。 - mechanical_meat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接