Django使用markdown2转换Markdown为HTML后页面无法正常渲染如何解决
问题原因
你的判断是正确的。Django模板默认开启了HTML自动转义机制,所有传入模板的字符串变量都会被转义处理(例如<会被转换为<实体字符),目的是防范恶意脚本注入攻击,因此你转换完成的HTML代码会被识别为普通纯文本渲染,直接在页面上显示标签源码。
解决方法
两种常用方案可按需选择:
- 方案1:在模板层添加
safe过滤器
直接修改模板代码,给输出变量添加safe过滤器,明确告知Django该内容为安全内容,无需做转义处理:
{% block body %} <div> {{ html_markdown|safe }} </div> {% endblock %}
- 方案2:在视图层将内容标记为安全字符串
在视图函数中导入Django内置的mark_safe方法,提前将转换后的HTML内容标记为安全类型,模板部分无需修改:
首先导入依赖:
from django.utils.safestring import mark_safe
修改视图返回的参数部分:
return render(request, "encyclopedia/entry.html", { "html_markdown": mark_safe(markdown2.markdown_path(pathOfFile)) })
安全注意事项
如果你的站点支持普通用户提交编辑Markdown内容,直接关闭转义会存在XSS跨站脚本攻击风险,建议在Markdown转换完成后,用内容清理工具过滤掉危险的HTML标签、属性和脚本内容后,再传入模板渲染。
内容的提问来源于stack exchange,提问作者amiller_lite
相关产品推荐
相关产品推荐

