【发布时间】:2020-01-04 04:46:32
【问题描述】:
我的 Jinja 模板中有一个 if 语句,出于可读性原因,我想将它写在 multines 中。考虑案例
{% if (foo == 'foo' or bar == 'bar') and (fooo == 'fooo' or baar == 'baar') etc.. %}
【问题讨论】:
标签: jinja2
我的 Jinja 模板中有一个 if 语句,出于可读性原因,我想将它写在 multines 中。考虑案例
{% if (foo == 'foo' or bar == 'bar') and (fooo == 'fooo' or baar == 'baar') etc.. %}
【问题讨论】:
标签: jinja2
根据文档: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 上方,就像您使用# 语法一样。