Django 奇怪地解释了安全过滤器

Posted

技术标签:

【中文标题】Django 奇怪地解释了安全过滤器【英文标题】:Django interprets safe filter weirdly 【发布时间】:2022-01-06 10:53:49 【问题描述】:

我们有一个 django 模板,但是我对富文本数据有一个奇怪的问题。

例子:

模板:<p class="correctClass">team.description|safe</p>

我们 CMS 中 team.description 的源代码:<p>Correct text</p>

结果:

<p class="correctClass"></p>
<p>Correct text</p>
<p></p>

没有安全过滤器是这样的:

<p class="correctClass">
    <p>Correct text</p> (this line is text, not parsed as html)
</p>

当然想要的输出是:

<p class="correctClass">Correct text</p>

【问题讨论】:

试着让外面的一个 div ......也许你不能嵌套

(只是一个猜测)

这有什么奇怪的?你传入一个包含 HTML 的字符串,向 Django 指定它是安全的。当然 Django 会这样渲染它。是否要删除该字符串中的所有 HTML 标记? @AbdulAzizBarkat 为什么它将我在模板代码中提供的内容呈现给第一个结果代码? child|safe 呈现 (childContentGoesHere)。这有什么意义? :o @JoranBeasley Lol 成功了,但为什么呢? 这能回答你的问题吗? HTML tags inside paragraph <p> 【参考方案1】:

如果你想实现,你可以使用striptags

<p class="correctClass">team.description|striptags</p>

"请注意,striptags 并不能保证其输出是 HTML 安全的,尤其是对于无效的 HTML 输入。因此,切勿将安全过滤器应用于 striptags 输出。如果您正在寻找更强大的东西,您可以使用漂白 Python 库,尤其是它的 clean 方法。”来自官方文档 更多信息请参考https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#striptags

【讨论】:

以上是关于Django 奇怪地解释了安全过滤器的主要内容,如果未能解决你的问题,请参考以下文章

django:使用没有 unicode 'u' 类型指示符的安全过滤器渲染变量

关于ManyToMany过滤和组合查询集的非常奇怪的行为

如何有条件地在 Django 中应用模板过滤器?

在 Django 中,如何优雅地将查询集过滤器添加到大型组或对象的所有成员?

为什么Django Template内置标记过滤器{{value |安全}}不工作在头和脚本的元?

django trans 标签内的过滤器:首先翻译然后应用过滤器;不像其他标签