safeが必要ないオブジェクトを作る。

djangoのテンプレートの話。

カスタムタグやフィルタ以外で、safeをつける必要がないオブジェクトを作りたい。
formのような。

{{form.as_p}}

はできるけれど、自分で作った以下のようなオブジェクトはsafeをつける必要がある。

class A(str):
   def as_p(self):
      return "<p>%s</p>" % self

使う時こうしなければならない。

{{a.as_p|safe}}

django.utils.safestring.mark_safeを使えば良いらしい。

from django.utils.safestring import mark_safe

class A(str):
   def as_p(self):
      return mark_safe("<p>%s</p>" % self)

これで、以下のように書ける。

{{a.as_p}}