如何在Django模板中添加大括号?

24

我需要生成一个被大括号包围的ID(例如"{1234}")。使用Django模板语言时,大括号还用于开始变量替换,所以我在获取想要的内容时遇到了一些麻烦。我尝试过:

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

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

在采取这种方式之前,我更愿意问是否存在更好的解决方案。

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

谢谢

编辑: 我写了一个快速过滤器。 在此粘贴以便其他人可以将其用作编写更复杂过滤器的模板。 要放入Python包应用程序路径 / 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+"}"
3个回答

30

谢谢!无论如何,我写了一个过滤器。添加它,以便如果有人想将其用作小型过滤器示例... - Stefano Borini

10

{% templatetag openbrace %}在例如Javascript模板中变得非常冗长。

我曾经使用过这个代码片段中的verbatim标签,对此目的有一些成功的应用,它可以让你像下面这样做:

{{ 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 %}

verbatim模板标签现在是Django(1.5)的一部分:https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#verbatim - stephendwolff
这个问题上的被接受答案可能应该更改——逐字逐句确实是现在正确的方法。 - shacker

1

1
对于小的逐字值,这是一个很好的解决方案。对于大块内容,我会选择 {% verbatim %} 块标签。 - Rebs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接