テンプレート変数をHTMLとしてレンダリングする


186

'messages'インターフェイスを使用して、次のようにメッセージをユーザーに渡します。

request.user.message_set.create(message=message)

{{ message }}変数にhtmlを含め、テンプレートのマークアップをエスケープせずにレンダリングしたいと思います。

回答:


331

HTMLをエスケープしたくない場合は、safeフィルターとautoescapeタグを確認します。

safe

{{ myhtml |safe }}

autoescape

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}

ユーロ(€)などの通貨記号を表示する必要がある場合は、ドルがビューから渡されます。
andilabs 2014

ありautoescape off、ないことに注意してくださいon。私はその間違いを犯し、後で発見しました。
アヌパム

37

テキストでもっと複雑なことをしたい場合は、独自のフィルターを作成し、htmlを返す前に魔法をかけることができます。templatagファイルは次のようになります。

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def do_something(title, content):

    something = '<h1>%s</h1><p>%s</p>' % (title, content)
    return mark_safe(something)

次に、これをテンプレートファイルに追加できます。

<body>
...
    {{ title|do_something:content }}
...
</body>

そして、これはあなたに素晴らしい結果を与えるでしょう。



29

次のようにコードでテンプレートをレンダリングできます。

from django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')

c = Context({'message': 'Your message'})
html = t.render(c)

詳細については、Djangoのドキュメントを参照してください。


ここで棒の端が間違っていたと思いますが、今のところ答えは残しておきます。
Marcus Whybrow、2011年


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.