如何在新的Django消息框架中的消息中输出HTML?

我试图显示一个消息,通过新的Django消息框架显示了一点的HTML。 具体来说,我通过ModelAdmin.message_user方法来完成这个工作,这个方法只是一个简单的消息()的包装:

def message_user(self, request, message): """ Send a message to the user. The default implementation posts a message using the django.contrib.messages backend. """ messages.info(request, message) 

我迄今为止所尝试的所有东西似乎都显示了转义的HTML。

 self.message_user(request, "<a href=\"http://www.google.com\">Here's google!</a>") 

不工作,也不:

 from django.utils.safestring import mark_safe ... self.message_user(request, mark_safe("<a href=\"http://www.google.com\">Here's google!</a>")) 

模板代码在admin base.html模板中的显示非常简单:

  {% if messages %} <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul> {% endif %} 

所以我不完全确定我做错了什么。

非常感谢的思想或指导,谢谢!

另一个select是使用extra_tags关键字arg来表示消息是安全的。 例如

 messages.error(request, 'Here is a <a href="/">link</a>', extra_tags='safe') 

然后使用模板逻辑来使用安全filter

 {% for message in messages %} <li class="{{ message.tags }}"> {% if 'safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %} </li> {% endfor %} 

如下面的Django票据所述,如果您将Mark_safe()与SessionStorage后端结合使用,它应该可以工作: https ://code.djangoproject.com/ticket/14976#comment:9

你有没有试过{{ message | safe }} {{ message | safe }}

在Django模板系统中,模板variables总是被转义,除非您使用safe筛选器将其指定为安全模板。 这个默认值使得即使是不受注入攻击的保护。

我不知道这是如何与mark_safe交互,但也许发生了什么事情之间,使之不安全。

我正在寻找一种在pipe理列表中使用非转义HTML的方法。 不知道这是否适用于消息框架,但使用这里描述的allow_tags帮助我。

http://urlencode.blogspot.com/2009/10/neat-django-admin-tricks-part-1.html