栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何防止Django基本内联自动转义

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何防止Django基本内联自动转义

我维护Inline应用程序的分支。理查德就此问题与我联系,我能够将其追溯到BeautifulSoup,而不是Django。

问题在于,BeautifulSoup的

replaceWith()
方法被用来用呈现的模板替换内联标记。结果
render_to_string()
当然是一个字符串。当
replaceWith()
接收到一个字符串,它把它变成一个
NavigableString
。由于BeautifulSoup期望
NavigbleString
s是字符串,因此假定它们是不安全的,并且转义了任何HTML字符。结果是Inline
inlines()
函数返回的值中有一堆
>
and
<
而不是
<
and
>

我在Django
1.3中没有注意到这个问题。当我看时,BeautifulSoup确实返回了转义的HTML。Django的

|safe
模板过滤器必须已经转义了先前转义的HTML。在Django
1.4中,它不再这样做。(它不应该这样做!)

我的解决方法是像以前一样,使用BeautifulSoup解析传入的值,并使用BeautifulSoup查找所有内联标记。而不是使用BeautifulSoup的

replaceWith()
方法用呈现的内联模板替换内联标记,我现在仅使用Python的old
str.replace()
。对我来说有点la脚,将解析的汤转换回字符串,然后进行字符串替换。但这有效。我有部分打算完全放弃BeautifulSoup,并找到具有正则表达式的内联标记,但是我们都知道那怎么结束。如果有人有更好的主意,我全都听!

该修复程序最初是在此提交中使用的。我在以下提交中对其进行了改进,但是显然StackOverflow只允许我最多发布两个链接,因此您必须自己找到一个链接!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号