如何在新的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