放<a> hyperlink in a django message</a>

时间:2011-04-10 19:38:01

标签: django django-templates

我正在使用django消息,我想在其中添加一个超链接。

view.py:

from django.contrib import messages

def my_view(request):
    messages.info(request,"My message with an <a href='/url'>hyperlink</a>")

显然,在我的页面中,我看到了html代码,没有超链接。如何将消息视为htlml代码?

希望这很清楚。

3 个答案:

答案 0 :(得分:47)

如果您不想关闭所有邮件/模板的自动加注,您可以将mark_safe用于该特定邮件:

from django.utils.safestring import mark_safe

messages.info(request, mark_safe("My message with an <a href='/url'>hyperlink</a>"))

如果您的消息中有一些不安全的部分,您可以使用cgi.escape来逃避这些部分。

from cgi import escape
messages.info(request, mark_safe("%s <a href='/url'>hyperlink</a>" % escape(unsafe_value)))

答案 1 :(得分:13)

Django模板中的字符串会自动转义。您不希望自动转义原始HTML,因此您应该将字符串传递给safe过滤器:

{{ message|safe }}

或使用autoescape标记禁用自动视图:

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

答案 2 :(得分:6)

https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.html.format_html开始,另一种选择是使用format_html,它将转义为(不安全)参数,类似于模板系统中的转义。

from django.utils.html import format_html

messages.info(request, format_html("My {} <a href='/url'>{}</a>", some_text, other_text))