Djangoはdjango.utils.safestring.mark_safe
を使用して作成することができる安全列(具体SafeUnicode
又はSafeString
)と呼ばれる文字列のサブクラスを有します。テンプレートエンジンは、安全な文字列に遭遇すると、それはそれでエスケープ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を参照してください。