我使用'messages'界面来传递消息给用户,就像这样:

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

我想在我的{{message}}变量中包括html,并在不转义模板中的标记的情况下呈现它。


当前回答

使用autoescape关闭HTML转义:

{% autoescape off %}{{ message }}{% endautoescape %}

其他回答

你可以像这样在你的代码中渲染一个模板:

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

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

更多信息请参阅Django文档。

安全过滤器帮我解决了这个问题。 使用{{data|safe}}包含html。

最简单的方法是使用安全过滤器:

{{ message|safe }}

有关安全过滤器的更多信息,请参阅Django文档。

如果你不希望HTML被转义,看看安全过滤器和autoescape标签:

安全:

{{ myhtml |safe }}

自动逃生:

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

不需要在模板中使用过滤器或标签。 只需使用format_html()将变量转换为html, Django就会自动为你的变量关闭转义。

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

点击这里查看https://docs.djangoproject.com/en/3.0/ref/utils/#django.utils.html.format_html