如何截断HTML而不破坏标签?

11 投票
2 回答
5054 浏览
提问于 2025-04-18 09:05

如何确保所有的HTML标签都被关闭?这个问题出现是因为我想为每篇文章创建一个摘要。例如,有人写了一篇这样的文章:

Hi everyone, I'm just an article and I have few <strong>tags</strong> inside <em>of me</me>

如果我在“tags”后面就截断这段信息,我就会得到一个没有关闭的标签。那我该如何在Django中检查用户输入的所有文本,以确保在保存到数据库之前都是正确的呢?

2 个回答

4

在Django 1.6版本中,有一个叫做truncatewords_html的功能,可以直接使用,不需要自己去写一个自定义的过滤器。

你可以在这里查看详细信息:https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#truncatewords-html

10

在Django 1.7中,有一个特别的模板过滤器叫做 truncatechars_html

这个过滤器和truncatechars类似,但它能识别HTML标签。在字符串中,如果有打开的标签在截断点之前没有关闭,它会在截断后立即关闭这些标签。

你还可以看看 truncatewords_html

对于Django版本低于1.7的,你可以使用 truncatewords_html,或者根据1.7中实现的过滤器自定义一个过滤器(源代码),或者使用这个 代码片段(我没有测试过)。另外,关于这个代码片段的相关博客文章可以参考: 安全截断HTML

撰写回答