使用带有空格的 Jinja2 字符串作为 HTML 属性

OJF*_*ord 3 html python jinja2

如果我向 Jinja2 传递一个包含空格的字符串,例如:

myStr = "my string" #a google.appengine.ext.db.StringProperty
Run Code Online (Sandbox Code Playgroud)

然后渲染它,例如:

<div class={{ myStr }}>
Run Code Online (Sandbox Code Playgroud)

生成的 HTML 是:

<div class="my" string>
Run Code Online (Sandbox Code Playgroud)

我尝试通过创建过滤器来解决这个问题,用%20or替换空格&nbsp;,但似乎两者都无效,文字字符串被呈现,如<div class="my&nbsp;string">.

我发现确实呈现预期结果的唯一方法是:

<div class="{{ myStr }}">
Run Code Online (Sandbox Code Playgroud)

但这是一种不受欢迎的风格;尤其是因为它完全破坏了(“官方”)语法突出显示。

请注意,这会影响所有属性(我已经尝试过),而不仅仅是class. (title例如,想要一个空格似乎是合理的)。

我错过了什么,这应该如何处理?

Mar*_*ers 8

Jinja 2 对渲染的 HTML 没有做这样的事情;您的浏览器会因属性周围缺少引号而绊倒。从本质上讲,您正在生成:

<div class=my string>
Run Code Online (Sandbox Code Playgroud)

这意味着空格后面的部分是新属性,而不是属性的一部分class。你会注意到代码prettifier颜色mystring不同的; string就像class是一样的颜色。

添加属性以正确描述属性:

<div class="{{ myStr }}">
Run Code Online (Sandbox Code Playgroud)

产生输出

<div class="my string">
Run Code Online (Sandbox Code Playgroud)

如果这破坏了您的荧光笔,请使用更好的语法荧光笔。Jinja 作者为 TextMate 和 Sublime Text提供了一个包,他也为ViM制作了一个

是的,Sublime Text 高亮器不会高亮 HTML 属性中的 Jinja2 结构:

Jinja2模板代码的Sublime Text 3高亮

这可能是设计使然,而不是你做错了什么的迹象。