我试图在通过新的Django消息框架显示的消息中显示一些html.具体来说,我是通过ModelAdmin.message_user方法做到这一点的,它只是对messages()的一个薄包装:
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, "Here's google!")
不起作用,也不起作用:
from django.utils.safestring import mark_safe ... self.message_user(request, mark_safe("Here's google!"))
admin base.html模板中模板代码的显示非常简单:
{% if messages %}
所以我不确定我做错了什么.
非常感谢您的想法或指导,谢谢!
另一种选择是使用extra_tags
关键字arg来指示消息是安全的.例如
messages.error(request, 'Here is a link', extra_tags='safe')
然后使用模板逻辑来使用安全过滤器
{% for message in messages %}
如下面的Django票证所示,如果将mark_safe()与SessionStorage后端结合使用,它应该可以工作:https://code.djangoproject.com/ticket/14976#comment:9
你试过{{ message | safe }}
吗?
在Django模板系统中,模板变量总是被转义,除非您使用safe
过滤器将它们指定为安全.此默认设置甚至可以防止注意攻击.
我不确定它是如何与mark_safe交互的,但也许在它之间发生了一些让它再次变得不安全的事情.
这对我有用(Django 1.11):
from django.contrib import messages from django.utils.safestring import mark_safe messages.info(request, mark_safe('This is link to http://google.com'))