python 在jinja2 & flask中去除空格...为什么我还需要减号?

5t7ly7z5  于 2023-03-28  发布在  Python
关注(0)|答案(3)|浏览(279)

在我的init.py文件中:

app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True

我希望在我的jinja2模板中,空白将被修剪,以便:

<div>
{% if x == 3 %}
<small>{{ x }}</small>
{% endif %}
</div>

将呈现为:

<div>
<small>3</small>
</div>

相反,我得到了额外的空白:

<div>

<small>3</small>

</div>

为什么trim_blocks和lstrip_blocks不修剪空白?

9rygscc1

9rygscc11#

jinja 2加载您的模板之前,您的环境设置似乎没有**设置。

class jinja2.Environment([options])

...如果这个类的示例不是共享的,并且**如果到目前为止还没有加载模板,则可以修改它们。**在加载第一个模板之后对环境进行修改将导致令人惊讶的效果和未定义的行为。
http://jinja.pocoo.org/docs/dev/api/#jinja2.Environment
检查代码的顺序/结构,查看环境设置和模板是如何加载的。
顺便说一句,jinja 2的空白控制确实可以像预期的那样工作,而没有环境和加载的复杂性:

import jinja2

template_string = '''<div>
{% if x == 3 %}
<small>{{ x }}</small>
{% endif %}
</div>
'''
# create templates
template1 = jinja2.Template(template_string)
template2 = jinja2.Template(template_string, trim_blocks=True)

# render with and without settings
print template1.render(x=3)
print '\n<!-- {} -->\n'.format('-' * 32)
print template2.render(x=3)
<div>

<small>3</small>

</div>

<!-- -------------------------------- -->

<div>
<small>3</small>
</div>

我没有用过jinja 2,但扫描文档后,加载顺序似乎可疑。

kknvjkwl

kknvjkwl2#

您必须使用减号转义{% if %}和{% endif %}语句,以取消空行:

<div>
{%- if x == 3 %}
<small>{{ x }}</small>
{%- endif %}
</div>
oug3syen

oug3syen3#

如果你的代码在macro.html中,你必须手动添加**"-"**,不能使用下面的代码。

app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True

相关问题