Ответ 1
Django имеет подкласс строк, называемых безопасными строками (в частности SafeUnicode
или SafeString
), которые могут быть созданы с помощью django.utils.safestring.mark_safe
. Когда механизм шаблона попадает в безопасную строку, он не выполняет HTML-экранирование на нем:
>>> from django.utils.safestring import mark_safe
>>> from django.template import Template, Context
>>> Template("{{ name }}").render(Context({'name': mark_safe('<b>Brad</b>')}))
u"<b>Brad</b>"
Если вы пишете свой собственный тег шаблона, вам нужно реализовать render()
, который вернет строку, которая будет считаться безопасной, что означает, что вам нужно самому справиться с любым возможным экранированием. Однако, если вы пишете фильтр шаблонов, вы можете установить атрибут is_safe = True
на фильтр, чтобы избежать автоматического экранирования возвращаемого значения, например.
@register.filter
def myfilter(value):
return value
myfilter.is_safe = True
Подробнее см. https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping.