如何在django模板中转义{{或}}?

Django将{{ var }}视为其模板中的某个variables。 我如何转义{{ var }}{{}} ,使得django不会将其视为variables。

<p>"{{ some text }}"</p>应该打印完全相同。

我相信你正在寻找templatetag模板标签。

正如链接到的文件所述,

由于模板系统没有“转义”的概念,因此要显示模板标记中使用的某个位,必须使用{% templatetag %}标记。

例如:

 <p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p> 

会显示如下:

 <p>"{{ some text }}"</p> 

Django 1.5引入了{% verbatim %}模板标签。 它会停止模板parsing这个标签的内容:

 {% verbatim %} {{ var }} {% endverbatim %} 

将呈现为:

 {{ var }} 

编辑:我不是真的推荐这个,因为它不是很干净,但它仍然是一个选项。

我正在寻找一种可以与JQuery Templates一起使用的方法,并find了一种无需标签或filter的方法。 这是尽可能短,我可以得到它:

 {{ "{{ any text }" }}} 

打印为:

 {{ any text }} 

为什么它的作品? {{}}中的任何文本都按原样显示,只要它在一行中没有两个大括号}}。 然后,在一行中有三个括号,django将两个第一个解释为variables的结尾,并留下一个附加的大括号。

您可以尝试使用html字符转义逃避,如:

{= &#123;

} = &#125;

 <p>"&#123;&#123; some text &#125;&#125;"</p> 

尝试一下你的浏览器。

如果您只需将{{}}用作模板框架(如angularjs)的variables,则可能会更简单:

<app path>/templatetags/ngvar.py中添加

 from django import template register = template.Library() @register.simple_tag def ngvar(var_name): return "{{%s}}" % var_name 

并在模板中,做

 {% load ngvar %} {% ngvar "variable name" %} 

如果ngvar.py是第一个模板标签,那么确保将__init__.py文件添加到templatetags目录

虽然上面的答案可以解决原来的问题,但是对于那些像我这样挠头的人,我在这里添加一些破解。

有时候,我们想渲染一个大括号,然后是一个variables。 例如,在BibTeX中,可能有这样的东西:

 @MISC{hu2012-spectral, author = {Hu, Pili}, title = {Spectral Clustering Survey}, howpublished = {GitHub, https://github.com/hupili/tutorial/tree/master/spectral-clustering}, month = {May}, year = {2012} } 

这些围脖领域来自模板variables。 如果你写

 title = {{{title}}}, 

忍者无法编译和提出错误。 如果你写

 title = { {{title}} }, 

会有额外的空白。 周围的黑客是将“{”和“}”作为variables存储并在以后使用。

 {% set lb = '{' %} {% set rb = '}' %} ... @MISC{{lb}}{{ meta.bib_key }}, author = {{lb}}Hu, Pili{{rb}}, title = {{lb}}{{ meta.title }}{{rb}}, howpublished = {{lb}}GitHub, https://github.com/hupili/tutorial/tree/master/{{ auto.path}}{{rb}}, month = {{lb}}{{ meta.month }}{{rb}}, year = {{lb}}{{ meta.year }}{{rb}} } 

这看起来笨拙,但这是迄今为止我发现的最好的。 如果你有一个更清洁的解决scheme,请告诉我。

另一个select是在每个花括号之间添加一个单词连接符 (零宽度不间断空格):

 <p>"{&#8288;{ some text }&#8288;}"</p> 

这个模板标签 (devise用于jQuery模板)可能会诀窍。 它让你包装你不想Django解释为模板标签的variables的内容。

Jinja,这是模板的使用,提供了一些逃避这里的build议。 最适合我的是使用诸如"{% raw %}{{ some text }}{% endraw %}"

它可以通过避免相邻angular度backets来解决,如果其内部的JavaScript代码,那么你可以写

 '{'+'{address.'+key+'}}' 

我用这个打印jinjavariables到另一个模板,使用javascript。