博客参考追梦人物老师教程,记录学习过程。
通过截取博客正文内容的前50个字符自动生成一段摘要:
- 在视图函数中覆写save方法
- 直接在模板中进行内容截取
视图函数中覆写save方法
模型的save方法用于保存数据到数据库中,通过覆写save方法可以在保存数据前做一些小的操作。 post类的save方法中添加
from django.utils.html import strip_tags
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
])
self.abstract = strip_tags(md.convert(self.body))[:50]
其中md 对象用于将markdown文本渲染为html文本,注意博客的正文body默认是markdown语法写的 。 strip_tags 函数用于去除html内容中的标签,最后取前50个字符作为模型的摘要。 完整的save函数变为:
def save(self, *args, **kwargs):
self.modified_time = timezone.now()
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
])
self.abstract = strip_tags(md.convert(self.body))[:50]
super().save(*args, **kwargs)
需要注意的是,save函数要保存数据时才会触发。
模板过滤器
模板中形似{{ var | filter: arg }} 的内容称为模板过滤器,类似于一个函数,它对变量var 进行处理得到想要的结果。 truncatechars模板过滤器:可以对变量进行截取 因此第二种摘要生成方法直接在模板中对正文进行截取
<p>{{ post.body|truncatechars:54 }}</p>
对变量post.body进行截取前54个字符,作为摘要。
|