23

我需要生成一个用大括号括起来的 id(例如 "{1234}" )。使用django模板语言,大括号也用于启动变量替换,所以我在获取我想要的东西时遇到了一些麻烦。我试过

{{{ id }}}
{{ '{'id'}' }}
{{ '{'+id+'}' }}
{ {{ id }} }

这些方法都不起作用,除了最后一种方法,不幸的是它产生了“{ 1234 }”,这不是我想要的。我目前有两种解决方案:要么传递一个已经包含 {} 的 id 变量(丑陋),要么我编写一个自定义过滤器,然后编写 {{ id|add_braces }} (我更喜欢它)。

在走这条路之前,我更喜欢问是否存在更好的解决方案。

使用转义值不起作用。即使我添加 {% autoescape off %}%7B{% endautoescape %} 我也没有得到 {,这很奇怪,但这是另一个问题。

谢谢

编辑:我写了一个快速过滤器。将其粘贴在这里,以便其他人可以将其用作编写更复杂模板的模板。放入python包application_path/templatetags/formatting.py

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def add_braces(value):
    return "{"+value+"}"
4

3 回答 3

30

我想你的答案可以在这里找到:

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

简而言之,您要使用{% templatetag openbrace %}and {% templatetag closebrace %}

编辑:Django 现在还包括开箱即用的此功能:

{% verbatim %} {{ blah blah }} {% endverbatim %}
于 2009-11-02T05:23:40.043 回答
10

{% templatetag openbrace %}变得非常冗长,例如 javascript 模板

我已经成功地使用了这个 gistverbatim中的标签来实现这个目的,它可以让你做类似的事情

{{ request.user }}
{% verbatim %}
     brackets inside here are left alone, which is handy for e.g. jquery templates
     {{ this will be left }}
     {% so will this %}
{% endverbatim }}

{% more regular tags (to be replaced by the django template engine %}
于 2011-12-02T15:51:04.690 回答
0

Jinja 模板语言的推荐也适用于 Django 模板引擎:

http://jinja.pocoo.org/docs/dev/templates/#escaping

解决方案是这样的:

{{ '{' }}{{ id }}{{ '}' }}

当然,其他两个答案有效,但在我看来,这是一个不那么冗长且更具可读性的答案。

于 2015-04-21T00:35:55.597 回答