Как поставить фигурные скобки в шаблонах django?

мне нужно создать идентификатор в скобках ( например "{1234}" ). С языком шаблонов django фигурные скобки также используются для запуска подстановки переменных, поэтому у меня есть некоторые проблемы с получением того, что я хочу. Я пытался!--3-->

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

ни один из этих методов не работает, кроме последнего, который, к сожалению, производит " { 1234 }", а не то, что я хочу. В настоящее время у меня есть два решения : либо я передаю переменную id, уже содержащую {} (ugly), либо я пишу пользовательский фильтр, а затем напишите {{ 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+"}"

3 ответов


Я думаю, что ваш ответ можно найти здесь:

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

короче говоря, вы хотите использовать {% templatetag openbrace %} и {% templatetag closebrace %}.

изменить: Джанго теперь также включает в себя эту функциональность из коробки:

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

рекомендация от языка шаблонов Jinja также работает с механизмом шаблонов Django:

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

решение такое:

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

конечно, другие два ответа работают, но это один менее подробный и более читаемый, на мой взгляд.