Django 将 {{ var }}视为其模板中的某个变量。如何转义 {{ var }}、 {{或 }},使 django 不将其视为变量。
{{ var }}
{{
}}
指纹应该完全一样。
我相信你正在寻找的 templatetag模板标签。
templatetag
正如链接到文档中所说,
由于模板系统没有“转义”的概念,要显示模板标记中使用的位之一,必须使用 {% templatetag %}标记。
{% templatetag %}
例如:
<p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p>
会显示如下:
<p>"\{\{ some text }}"</p>
您可以尝试使用 html 字符转义,比如:
{ = {
{
= }
}
<p>"{{ some text }}"</p>
在你的浏览器里试试。
另一个选项是在每个花括号之间添加一个 字体连接器(零宽度不可中断空格) :
<p>"{⁠{ some text }⁠}"</p>
这个模板标记 (专为与 jQuery Template 一起使用而设计)可能可以解决这个问题。它允许您用模板标记包装您不希望 Django 将其解释为变量的内容。
编辑: 我并不是真的推荐这个,因为它不是很干净,但它仍然是一个选项。
我一直在寻找一种可以用于 JQuery 模板的方法,并且找到了一种不需要标记或过滤器的方法。这是我能找到的最短的了:
\{\{ "\{\{ any text }" }}}
印刷方式如下:
\{\{ any text }}
为什么会有用? \{\{}}中的任何文本都按原样显示,只要它在一行中没有两个大括号}}。然后在一行中有三个括号,django 将前两个括号解释为变量的结尾,留下一个附加的结束括号。
Django 1.5引入了 {% verbatim %}模板标签,它阻止模板解析这个标签的内容:
{% verbatim %}
{% verbatim %} \{\{ var }} {% endverbatim %}
表示为:
\{\{ var }}
虽然上面的答案可以解决原来的问题,但是我在这里为那些像我一样摸不着头脑的人增加了一些技巧。
有时,我们想呈现一个大括号后跟一个变量。例如,在 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} }
这些 bib 字段来自模板变量
title = \{\{{title}}},
Jinja 无法编译并引发错误。如果您编写
title = { \{\{title}} },
将会有额外的空格。黑客的方法是将“{”和“}”作为变量存储并在以后使用。
{% 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}} }
这看起来很笨拙,但这是我迄今为止找到的最好的。如果你有更干净的解决方案,请告诉我。
金贾,这是什么正在使用的模板,提供了几个建议,以逃避 给你。什么是最适合我的是使用类似于 "{% raw %}\{\{ some text }}{% endraw %}"的东西
"{% raw %}\{\{ some text }}{% endraw %}"
如果您只是需要使用\{\{}}作为模板框架(如 angularjs)的变量,那么以下步骤可能更简单:
在你的 <app path>/templatetags/ngvar.py里,加上
<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目录
__init__.py
templatetags
它可以通过避免相邻的角背包来解决,如果它的内部 javascript 代码,那么你就可以写
'{'+'{address.'+key+'}}'
我使用 javascript 将 jinja 变量打印到另一个模板中。