Python 在jinja2&;烧瓶…为什么我还需要减号?

Python 在jinja2&;烧瓶…为什么我还需要减号?,python,jinja2,Python,Jinja2,在我的init.py文件中,我有: app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True 我希望在我的jinja2模板中,空白将被修剪,以便: <div> {% if x == 3 %} <small>{{ x }}</small> {% endif %} </div> {%x==3%} {{x} {%endif%} 将呈现为: <div> <

在我的init.py文件中,我有:

app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True
我希望在我的jinja2模板中,空白将被修剪,以便:

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

{%x==3%}
{{x}
{%endif%}
将呈现为:

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

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

<div>

<small>3</small>

</div>

3.

为什么不trim_块和lstrip_块修剪空白?

在jinja2加载模板之前,似乎没有设置环境设置

金甲2类。环境([选项])

。。。如果此类实例未共享,则可能会对其进行修改;如果到目前为止未加载任何模板,则可能会对其进行修改。在加载第一个模板后对环境进行修改将导致意外效果和未定义的行为

检查代码的顺序/结构,查看如何加载环境设置和模板

顺便说一句,jinja2在没有复杂的环境和加载的情况下确实可以按预期工作:

importjinja2
模板字符串=“”
{%x==3%}
{{x}
{%endif%}
'''
#创建模板
template1=jinja2.Template(模板字符串)
template2=jinja2.Template(Template\u string,trim\u blocks=True)
#使用和不使用设置进行渲染
打印模板1.render(x=3)
打印'\n\n'。格式('-'*32)
打印模板2.render(x=3)


3.
3.

我没有使用jinja2,但在扫描文档后,加载顺序似乎有问题。

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

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

{%-如果x==3%}
{{x}
{%-endif%}

我无法复制它(Jinja 2.7.3)。在Firefox和Chrome for me中查看渲染的源代码可以正确显示模板渲染,而不需要额外的换行符。这里有几个可能的原因。它可能是一个jinja2问题,但如果您在一个平台上开发,并在另一个平台上查看(例如)Isecond@tohster的评论,它也可能是一个编辑器或linux windows问题。您是否将赋值语句放错了位置?你能发布完整的源代码吗?如果你将Jinja2配置为trim_块和lstrip_块,那么默认情况下它应该抑制换行。因此,您没有回答OP的问题(他试图设置这些选项,但仍然不起作用)