Django имеет подкласс строк, называемый safe strings (в частности, 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.