カスタムテンプレートフィルタによって返されるクラスを作成しています。これは、HTMLを返す__str__
メソッドを持っています。私はそのHTMLをエスケープしたくありません。テンプレートをレンダリングする際にクラスを「安全」とマークする
__str__
メソッドから返す前に文字列にmark_safe
を呼び出してみましたが、結果はエスケープされています。これは、Djangoがオブジェクトを文字列に変換する前に安全であるかどうかをチェックしているためです。
私は何とかクラス自体を安全とマークできますか?
class ParagraphTag(object):
def __init__(self, text):
self.text = text
def __str__(self):
return mark_safe('<p>{}</p>'.format(self.text + 'baz'))
@register.filter(name='paragraph_tag')
def paragraph_tag(text):
return ParagraphTag(text)
テンプレート内の段落タグオブジェクトをレンダリングすると、エスケープされます。
{{ paragraph_tag }}
- ><p>foo</p>
私のテンプレートフィルターからそれを返すときに、私はParagraphTag
オブジェクト自体にmark_safe
を呼び出した場合、それは私が欲しいものではありませんSafeBytes
対象になってます。私は豊富なオブジェクトをテンプレートで利用できるようにしたいので、レンダリング時に文字列に変換する必要があります。
テンプレートフィルタから安全に戻ることはできませんか?あなたがコードのスニペットを表示することができれば助けになります。 – Sayse
@Sayseは例を追加しました – Acorn
最初の文では、このクラスはカスタムテンプレートフィルタから返されると言います。その例がありますか?それを安全に使うことは、(私にとっては)より意味をなさないでしょう。それ以外の場合は、これを行うことでどのような問題を解決しようとしていますか? – Sayse