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

时间:2014-09-23 21:01:48

标签: python html jinja2

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

myStr = "my string" #a google.appengine.ext.db.StringProperty

然后渲染它,例如:

<div class={{ myStr }}>

生成的HTML是:

<div class="my" string>

我尝试通过创建过滤器以使用%20&nbsp;替换空格来解决此问题,但似乎两者都无效,文字字符串会被渲染,如<div class="my&nbsp;string">。< / p>

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

<div class="{{ myStr }}">

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

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

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

1 个答案:

答案 0 :(得分:4)

Jinja 2对呈现的HTML没有任何意义;这是你的浏览器,它会因属性周围缺少引号而绊倒。从本质上讲,你正在产生:

<div class=my string>

这意味着空格后的部分是新属性,而不是class属性的一部分。您会注意到代码美化颜色mystring的颜色不同; string的颜色与class相同。

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

<div class="{{ myStr }}">

生成输出

<div class="my string">

如果这打破了您的荧光笔,请获得更好的语法荧光笔。对于TextMate和Sublime Text,Jinja作者有provided a package,他还为ViM制作了一个。

是的,Sublime Text荧光笔没有在HTML属性中突出显示Jinja2构造:

  

Sublime Text 3 highlighting of Jinja2 template code

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