在django消息中放置一个<a>超链接[重复]

Posted

技术标签:

【中文标题】在django消息中放置一个<a>超链接[重复]【英文标题】:Put a <a> hyperlink in a django message [duplicate] 【发布时间】:2011-08-02 14:54:03 【问题描述】:

我正在使用 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 代码并且没有超链接。如何将消息视为 html 代码?

希望这很清楚。

【问题讨论】:

虽然这里的答案可行,但我强烈建议在此处为非常相似的问题提供答案:***.com/a/10124845/26196——它提供了更大的潜在灵活性,而没有其他方法的一些警告。 【参考方案1】:

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

 message|safe 

或使用autoescape 标签禁用自动转义:

% autoescape off %
     message 
% endautoescape %

【讨论】:

【参考方案2】:

如果您不想关闭所有消息/模板的自动转义,可以对特定消息使用 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)))

【讨论】:

您必须将 SessionStorage 用于消息框架才能使其正常工作 - 请参阅 ***.com/questions/2053258/… 我想这不应该为每条消息启用,因为它们可能包含用户提供的数据,只是为了安全起见。谢谢你的回答【参考方案3】:

从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))

【讨论】:

以上是关于在django消息中放置一个<a>超链接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在翡翠中放置一个有条件的html标签?

如何在 <li> 元素中放置多个类?

如何在rails提交按钮中放置图标

在父 Div 中放置多个 Div(并排)

如何在整个页面中放置表格

我在哪里必须在Django中放置test _ *。py文件?