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 奇怪地解释了安全过滤器的主要内容,如果未能解决你的问题,请参考以下文章