web-dev-qa-db-ja.com

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

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

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

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

159
xpanta

HTMLをエスケープしたくない場合は、safeフィルターとautoescapeタグを見てください

フィルター:{{ myhtml |safe }}
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe

TAG:{% autoescape off %}{{ myhtml }}{% endautoescape %}http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

289

テキストでもっと複雑なことをしたい場合は、独自のフィルターを作成し、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>

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

30
Goose Ninja

autoescape を使用して、HTMLエスケープをオフにします。

{% autoescape off %}{{ message }}{% endautoescape %}
29
mipadi

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

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

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

詳細については、 Django docs を参照してください。

26
Marcus Whybrow

最も簡単な方法は、safeフィルターを使用することです。

{{ message|safe }}

詳細については、 安全なフィルターのDjangoドキュメント をご覧ください。

16
Marcus Whybrow

テンプレートでフィルターまたはタグを使用する必要はありません。 format_html()を使用して変数をhtmlに変換すると、Djangoは自動的に変数のエスケープをオフにします。

format_html("<h1>Hello</h1>")

こちらをご覧ください https://docs.djangoproject.com/en/1.9/ref/utils/

5
NorWay