【问题标题】:Using Jinja2 strings with spaces as HTML attributes使用带有空格的 Jinja2 字符串作为 HTML 属性
【发布时间】:2014-11-18 05:23:19
【问题描述】:

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

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

然后渲染它,例如:

<div class={{ myStr }}>

生成的 HTML 是:

<div class="my" string>

我已尝试通过创建过滤器来解决此问题,用%20&amp;nbsp; 替换空格,但似乎两者都无效,呈现文字字符串,如&lt;div class="my&amp;nbsp;string"&gt;

我发现真正呈现预期结果的唯一方法是:

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

但这是不受欢迎的风格;尤其是因为它完全破坏了(“官方”)语法高亮。

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

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

【问题讨论】:

  • 你“不受欢迎”的风格实际上绝对是正确的方式。
  • @DanielRoseman 那么the 'official' highlighter 有错误吗?这就像 HTML 一样突出显示,这使得输出中看起来好像“{{”。

标签: python html jinja2


【解决方案1】:

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 结构:

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

【讨论】:

  • @OllieFord: "" + myStr 在字符串前面添加一个空字符串。如果您的荧光笔坏了,请使用更好的荧光笔,这绝不应该成为产生无效 HTML 输出的理由。
  • 啊,我明白了。荧光笔是 Jinja 的作者为您在其他地方发布的荧光笔 :)。 return '"'+string+'"' 的过滤器是一个合理的解决方案吗?
  • @OllieFord:如果您启用了自动转义,则不会;引号将替换为&amp;quot;
  • @OllieFord:顺便说一句,在使用 Jinja 渲染器时,我在 Sublime Text 3 中没有这样的问题。
  • 我在 Mac 上使用 ST3 + jinja2-tmbundle,该属性以与上面 SO 完全相同的方式突出显示 - 仅类似于 HTML。但是,{% for x in y %} 等在“HTML(jinja 模板)”中正确呈现。
猜你喜欢
  • 2023-04-02
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多