避免来自Jinja2的含糊不清的胡须,包括jQuery模板

我正在尝试将jQuery模板插入到Jinja2模板中。 唉,他们(在默认设置中)分别使用胡须{{}}来表示表达式和文字。

我正在使用script标记将我的jQuery模板插入HTML,如下所示:

  
The people are: {{ each people }} ${$value} {{ /each }}

然而,如果以上是在Jinja模板中,它会因为Jinja试图将each解释为文字而贬低。

在这种情况下(我们已经有很多模板),改变Jinja2的变量开始和结束分隔符是不切实际的。 此外,它令人困惑,降低了互操作性,并需要额外的培训。 最好避免使用此选项。

所以我想到的两个替代方案就是:

  1. Jinja2逃避每个'{{‘和’}}’,我不太确定如何做得最好(“{{”{{“}}`,也许,但这很冗长);

  2. 更实际 – 也许是理想的 – 会告诉Jinja2 不要解析代码块,也许是通过jQuery扩展。

我很感激你的想法和反馈。 谢谢你的阅读。

您可以使用{% raw %}{% endraw %}结构来缓解您的逃避问题(直接来自Jinja2文档 )。

例:

  

我在尝试使用聚合物时通过谷歌找到了这个,但不喜欢提出的解决方案,所以另一种选择:使用filter。

在你的python代码中定义一个filter:

 #Filter to create curly braces @app.template_filter('curly') def curly(value): #Handle value as string {{'foo'|curly}} if(isinstance(value,str)): return_value = value #Handle value directly. {{foo|curly}} else: return_value = value._undefined_name return "{{" + return_value + "}}" 

然后在你的模板中你可以使用{{'foo'|curly}}{{foo|curly}}

PS:如果你不使用烧瓶,我认为你不能使用装饰器,但必须明确地注册filter: environment.filters['curly'] = curly