如何截断HTML而不破坏标签?
如何确保所有的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。