在之前系列文章“Django开发个人博客网站”中,我们实现了个人博客网站的开发:往事如烟的博客。
但是,里面有一个小问题一直没有解决,就是在主页如何显示博文的摘要。因为我们采用markdown语法实现文章的排版,如果采用过滤器slice截取文章的前多少个字符时{{ content|safe|slice:"500" }}
,当恰好截取到包含有htlm标记的语法时,比如引用或图片时:
<code>
#配置404 500错误页面
def page_not_found(request):
return render(request, '404.html')
</code>
如果恰好截取到中间,则前端显示一定会出现排版乱码的现象,当时对于这个问题是暂时没有想好解决办法,只能将文章的全文显示出来{{ content|safe }}
后来偶然间发现,原来django其实早就帮我们解决好这个问题了,通过过滤器truncatechars_html。
truncatechars_html
类似于truncatechars,除了它知道HTML标记。 在字符串中打开并且在截断点之前未关闭的任何标记在截断后立即关闭。
像这样:
{{ value|truncatechars_html:9 }}
如果value是“&lt; p&gt; Joel 是 a slug&lt; / p&gt; “,输出将为”&lt; p&gt; Joel i …&lt; / p&gt;“ t7 >。
HTML内容中的换行符将保留。
这样,就可以避免截取到html中的标记而出现乱码的情况了。
{{ content|safe|truncatechars_html:500 }}