【问题标题】:How to put braces in django templates?如何在 django 模板中放置大括号?
【发布时间】:2010-12-12 04:23:37
【问题描述】:

我需要生成一个用大括号括起来的 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+"}"

【问题讨论】:

    标签: django braces


    【解决方案1】:

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

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

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

    编辑: Django 现在还包含这个开箱即用的功能:

    {% verbatim %} {{ blah blah }} {% endverbatim %}
    

    【讨论】:

    • 谢谢!无论如何,我写了一个过滤器。添加它以便如果有人想将其用作小型过滤器示例...
    【解决方案2】:

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

    我已经使用来自this 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 %}
    

    【讨论】:

    【解决方案3】:

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

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

    解决办法是这样的:

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

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

    【讨论】:

    • 对于小的逐字值,这是一个很好的解决方案。对于大块,我会使用 {% verbatim %} 块标签。
    猜你喜欢
    • 2021-04-27
    • 2021-08-21
    • 2018-06-16
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多