如何在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字符转义逃避,如:
{= {
} = }
<p>"{{ some text }}"</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>"{⁠{ some text }⁠}"</p>
这个模板标签 (devise用于jQuery模板)可能会诀窍。 它让你包装你不想Django解释为模板标签的variables的内容。
Jinja,这是模板的使用,提供了一些逃避这里的build议。 最适合我的是使用诸如"{% raw %}{{ some text }}{% endraw %}"
它可以通过避免相邻angular度backets来解决,如果其内部的JavaScript代码,那么你可以写
'{'+'{address.'+key+'}}'
我用这个打印jinjavariables到另一个模板,使用javascript。