我需要产生由括号包围的ID(例如“1234 {}”)。 随着Django模板语言,括号也用来启动一个变量替换,所以我必须在取得我想要的一些麻烦。 我试过了
{{{ id }}}
{{ '{'id'}' }}
{{ '{'+id+'}' }}
{ {{ id }} }
这些方法都不奏效,除了最后一个,不幸的是生产“{} 1234”,不是我想要的。 我目前有两种解决方案:要么我通过已经包含{}(丑陋的)的id变量或者我写的自定义过滤器,然后写{{ID | add_braces}}(我喜欢它)。
去之前就这样,我喜欢问,如果一个更好的解决方案存在。
使用转义值不起作用。 即使我添加{%autoescape关闭%}%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+"}"
我想你的答案可以在这里找到:
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag
总之,你要使用{% templatetag openbrace %}
和{% templatetag closebrace %}
。
编辑:Django的现在还包括这个功能开箱:
{% verbatim %} {{ blah blah }} {% endverbatim %}
{% 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 %}
从神社模板语言的建议与Django的模板引擎的工作原理,以及:
http://jinja.pocoo.org/docs/dev/templates/#escaping
解决的办法是这样的:
{{ '{' }}{{ id }}{{ '}' }}
当然,其他两个答案的工作,但这是一个更简洁,更具可读性,在我看来。