这一节主要做一些修补工作,一个是:文章阅读量的统计,另一个是自动生成文章摘要内容
1 . 文章阅读量的统计:
1 文章阅读量的统计,我们需要在model下的Post类中新加入一个views 字段用来统计文章被阅读的数量,
/blog/models.py
# 阅读数(>0的数)
views = models.PositiveIntegerField(default=0)
# 增加阅读数的方法
def increase_views(self):
self.views +=1
# update_fields 只更新数据库中的views
self.save(update_fields=['views'])
如图:
解释一下:PositiveIntegerField方法是一个不可能为负数的方法,这里我们默认传入0,
我们又写了一个方法,使得每次调用增加一次views,然后保存到数据库中,这里只进行更新数据库中【‘views’】的字段。
2 ,(修改视图函数)当我们每次访问detail.html即文章详情页的时候,就调用一次increase_views():方法
/blog/views.py
3 , (在模板中显示)在相应的index.html 和detail.html文件中进行数据的显示
/index.html
detail.html
4 , 进行数据库的更新:
python manage.py makemigrations
python manage.py migrate
重新运行一下服务器
2 文章摘要内容的自动生成
1 , 不知道大家还有没有记住excerpt 这个字段,也是存在Post类的字段,这里之前我们没有做任何处理,现在我们稍微做一下处理,
excerpt = models.CharField(max_length=200, blank=True)
在/blog/models.py文件
# 重写保存的方法
def save(self,*args,**kwargs):
# 如果没有摘要,则从body中取一部分
if not self.excerpt:
# 实例化md,用于渲染body文本
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
])
# 将md文本渲染成html
# strip_tags 去掉html文本的全部html标签
# 摘取body前54个给excerpt
self.excerpt = strip_tags(md.convert(self.body))[:54]
# 调用父类的保存方法保存到数据库中
super(Post,self).save(*args,**kwargs)
这里的方法是先将md文本渲染成html,用md.convert方法渲染,然后再取前54个给excerpt,最后保存到数据库中
2, 在适当的方法使用模板标签进行引用
/blog/index.html
<div class="entry-content clearfix">
<p> {{ post.excerpt }}...</p>
<div class="read-more cl-effect-14">
<a href="{{ post.get_absolute_url }}" class="more-link">继续阅读 <span class="meta-nav">→</span></a>
</div>
</div>
如下图:
我们在后台创建文章,然后不填摘要,就会截取一段文章内容的作为摘要
这样我们就把阅读量统计与文章摘要给做完了,下一节,可能写的比较少,但是理解起来也不容易,用多了也就知道怎么用了。