当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在新的Django消息框架中输出消息中的HTML?》经验,为你挑选了4个好方法。

我试图在通过新的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 %}
    
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %}

所以我不确定我做错了什么.

非常感谢您的想法或指导,谢谢!



1> DavidWinterb..:

另一种选择是使用extra_tags关键字arg来指示消息是安全的.例如

messages.error(request, 'Here is a link', extra_tags='safe')

然后使用模板逻辑来使用安全过滤器

{% for message in messages %}
    
  • {% if 'safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %}
  • {% endfor %}


    如果您还使用bootstrap,请小心使用extra_tags.你会在任何地方看到较旧的建议使用alert - {{message.tags}},但如果你使用extra_tags,这将会中断,因为你会获得警报安全,而不是警报 - 成功.作为解决方案,您可以使用alert - {{message.level_tag}}代替.
    谢谢你的提示.我认为这是这里提到的最简单但不引人注目且最安全的方法.您可以控制哪个消息标记为安全,而不是盲目地全局应用`{{message | safe}}`.
    @Walkman:如果该消息包含任何不受信任的内容,则不会.像从请求中取出的任何东西; 这是一个XSS漏洞.

    2> 小智..:

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


    谢谢!一旦我将`MESSAGE_STORAGE ='django.contrib.messages.storage.session.SessionStorage'添加到我的`settings.py`,使用普通的旧mark_safe()就可以了.

    3> Danny Robert..:

    你试过{{ message | safe }}吗?

    在Django模板系统中,模板变量总是被转义,除非您使用safe过滤器将它们指定为安全.此默认设置甚至可以防止注意攻击.

    我不确定它是如何与mark_safe交互的,但也许在它之间发生了一些让它再次变得不安全的事情.



    4> valex..:

    这对我有用(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'))
    

    推荐阅读
    雨天是最美
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有