Как поставить фигурные скобки в шаблоны Django?
Мне нужно создать идентификатор, заключенный в фигурные скобки (например, "{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+"}"
3 ответа
Я думаю, что ваш ответ можно найти здесь:
http://docs.djangoproject.com/en/dev/ref/templates/builtins/
Короче говоря, вы хотите использовать {% 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 %}
Рекомендация языка шаблонов Jinja работает и с механизмом шаблонов Django:
http://jinja.pocoo.org/docs/dev/templates/
Решение заключается в следующем:
{{ '{' }}{{ id }}{{ '}' }}
Конечно, два других ответа работают, но этот, на мой взгляд, менее многословен и более читабелен.