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

Tau*_*uir 59 python django

Django {{ var }}在其模板中将其视为一些变量.我怎样才能逃避{{ var }}{{}}使得Django不把它当作变量.

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

Ond*_*ták 128

Django 1.5引入了{% verbatim %}模板标签.它阻止模板解析此标记的内容:

{% verbatim %}
    {{ var }}
{% endverbatim %}
Run Code Online (Sandbox Code Playgroud)

将呈现为:

{{ var }}
Run Code Online (Sandbox Code Playgroud)

  • 这是最直接的方法。+1 (2认同)
  • 虽然'逐字'通常很有用,但Django bug https://code.djangoproject.com/ticket/23424使这个特定用法成为问题.例如,这将失败:{%逐字%} {{{%endverbatim%} {你好逐字%%}}} {%endverbatim%}字 '逐字' 实际上将出现在再现的文本... (2认同)

Nat*_*ate 60

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

作为链接到doc的状态,

由于模板系统没有"转义"的概念,因此要显示模板标签中使用的其中一个位,必须使用该{% templatetag %}标签.

例如:

<p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p>
Run Code Online (Sandbox Code Playgroud)

将如此出现:

<p>"{{ some text }}"</p>
Run Code Online (Sandbox Code Playgroud)


Lyc*_*cha 26

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

我正在寻找一个可以与JQuery模板一起使用的方法,并找到了一种无需标签或过滤器的方法.这是我能得到的最短:

{{ "{{ any text }" }}}
Run Code Online (Sandbox Code Playgroud)

印刷为:

{{ any text }}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?{{}}中的任何文本都会按原样显示,只要它连续没有两个结束括号}}.然后连续有三个括号,django将两个第一个括号解释为变量的结尾,留下一个额外的右括号.


Gui*_*sta 12

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

{= &#123;

} = &#125;

<p>"&#123;&#123; some text &#125;&#125;"</p>
Run Code Online (Sandbox Code Playgroud)

在浏览器中尝试一下.


小智 7

如果你只需要使用{{}}作为像angularjs这样的模板框架的变量,那么可能更简单:

在你的<app path>/templatetags/ngvar.py,添加

from django import template
register = template.Library()

@register.simple_tag
def ngvar(var_name):
    return "{{%s}}" % var_name
Run Code Online (Sandbox Code Playgroud)

在模板中,做

{% load ngvar %}
{% ngvar "variable name" %}
Run Code Online (Sandbox Code Playgroud)

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