在Django中实现字符串转换为HTML渲染的问题咨询
问题核心原因
Django模板默认开启了自动HTML转义机制,会把传入的HTML字符串中的<、>、"等特殊字符转义为字符实体,避免XSS攻击,因此你渲染出来的是HTML源码而非解析后的页面内容,不是转换操作的问题。
解决方法
方法1:模板层添加safe过滤器(最常用)
直接修改HTML模板代码,在变量后添加safe过滤器,告诉Django这段内容是安全的不需要转义即可:
{% extends "encyclopedia/layout.html" %} {% block title %} Encyclopedia {% endblock %} {% block body %} {{ fileContent|safe }} {% endblock %}
方法2:视图层标记安全字符串
如果这段内容在所有引用的位置都不需要转义,可以在视图层直接将内容标记为安全字符串,无需修改模板:
首先导入mark_safe工具:
from django.utils.safestring import mark_safe
修改视图代码:
f = mark_safe(markdown2.markdown(util.get_entry(title))) return render(request, "encyclopedia/entry.html", { "fileContent": f })
注意事项
如果你的Markdown内容支持普通用户提交,直接渲染原始HTML存在XSS注入风险,建议先使用内容过滤库清除<script>、<iframe>等危险标签后再渲染。
内容的提问来源于stack exchange,提问作者Nguyễn Tường Bách
相关产品推荐
相关产品推荐

