如何关闭Django模板的自动转义

其实我是想输入带格式的信息的。因为爬下来的数据这样显示效果会比较好。

但是Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。比如:

<p>这行代表会被自动转义</p>: {{ data }}
<p>这行代表不会被自动转义</p>: {{ data|safe }}

其中第二行我们关闭了Django的自动转义。
我们还可以通过{%autoescape off%}的方式关闭整段代码的自动转义,比如下面这样:

{% autoescape off %}
    Hello {{ name }}
{% endautoescape %}

在使用中,发现直接加上这两句代码是不可以的,因为我们后台返回的是 str,django底层是通过列表来操作的, 导致报错

如何关闭Django模板的自动转义

需要从后端进行操作:

如果需要渲染这段字符串,需要在view里这样写:

from django.utils.safestring import mark_safe

函数里面这样写:
pageHtml = mark_safe("<a href='{%url equip:listEquipmentCategory 1 %}'>首页</a>")
ret = {"equit_cate_list":list,"count":count,"ecform":ecform,"page":page,"pageHtml":pageHtml}
return render(request, "list_equip_category.html",ret)

前端页面直接使用{{pageHtml}}即可。
mark_safe这个函数就是确认这段函数是安全的,不是恶意攻击的。

这样就可以了

如何关闭Django模板的自动转义

相关文章:

  • 2021-06-08
  • 2021-11-16
  • 2021-12-29
  • 2021-09-18
  • 2022-12-23
  • 2021-12-15
  • 2021-06-27
  • 2021-07-22
猜你喜欢
  • 2022-02-18
  • 2021-08-09
  • 2022-12-23
  • 2021-12-23
  • 2021-11-05
  • 2021-09-03
相关资源
相似解决方案