【Django2.0学习笔记】27.获取评论数和细节处理

27、获取评论数和细节处理

1、如何获取评论数

  • 方法:filter筛选再用count方法计数
  • 问题:页面和代码更加复杂了
    在这里插入图片描述

修改blog/views.py如下:
在这里插入图片描述
修改blog_detail.html如下:
在这里插入图片描述
刷新页面,可以看到在博客详情页面就有显示评论数了
在这里插入图片描述
接着我们要让博客列表页面也显示出评论数

2、自定义模板标签

  • 降低耦合,代码更加独立和使用更加简单
  • 在app内创建templatetags包
  • 创建py文件
  • load标签加载该文件
    在这里插入图片描述

在comment文件夹下面新建一个文件夹templatetags,复制一个__init__.py文件到这个文件夹里,然后在这个目录下创建文件comment_tags.py,写入如下代码(小测试)

# # C:\Users\12482\Desktop\py_learn\Django2.0_chapter46\mysite_env\mysite\comment\templatetags\comment_tags.py
from django import template


register= template.Library()	# 用于注册

@register.simple_tag  # 将这个方法注册为simple_tag
def test():
	return 'this is test code'

保存后,重新启动服务之后,就把这个标签注册了,注册之后,我们就可以在模板页面使用。
首先要在模板页面中将这个标签加载进来(就像前面我们加载的那个静态文件一样,加载了之后就可以使用静态文件的标签)
修改blog_detail.html如下;
在这里插入图片描述

先保存,刷新页面,可以看到这个自定义模板标签就可以把我们想要的东西返回输出到模板页面
在这里插入图片描述

另外,这个模板标签还可以传一些参数,示例如下:
comment_tags.py:
在这里插入图片描述
blog_detail.html:
在这里插入图片描述
在这里插入图片描述
那么这样的话,我们就可以不用这么复杂。views里面 评论数量统计 是通过参数blog_content_type和blog.pk获取,那事实上我们可以通过博客blog获取到blog_content_type和blog.pk,传入参数进去,就可以统计出评论数量
修改comment_tags.py如下:
在这里插入图片描述
然后注释掉views.py里面我们最开始写的 统计评论数 这一行代码
在这里插入图片描述
修改blog_detail.html如下:
在这里插入图片描述
刷新页面
在这里插入图片描述
这样的话,我们就不用改views,就可以通过自定义标签把评论数显示出来。
那么除了在博客详情页面,我们也可以在博客列表这个页面将评论数显示出来
修改blog_list.html如下:
在这里插入图片描述
刷新页面
在这里插入图片描述

另外,自定义模板标签还有其他用法, 可以查看django官方文档

回头看views,里面还包含了评论相关的东西,比如comments评论列表、comment_form评论表单,这两个用自定义模板标签实现,就不用把这部分内容加到views里面,就可以让评论app和博客app完全分离,让评论比较独立,而且自定义模板标签用起来也比较简单,符合我们所说的降低耦合性、代码更简单、使用起来更加方便。

我们一个个来看
先看comment_form,同样的,它也只需要blog_content_type和blog_pk,这个很好处理,我们只需要把博客这个参数传进去我们自定义的模板标签,然后返回一个form给前端模板页面 就可以了,
修改comment_tags.py如下(参考views中context[‘commment_form’]这一行):
在这里插入图片描述
然后找到对应的模板页面,修改blog_detail.html如下:
在这里插入图片描述
注释掉views中context[‘commment_form’]这一行

然后刷新页面
在这里插入图片描述

另外,我们再来做第三个改动:context[‘comments’]这里
同样的
修改comment_tags.py:
在这里插入图片描述
修改blog_detail.html如下:
在这里插入图片描述
注释掉views.py中对应的代码
在这里插入图片描述
在这里插入图片描述

刷新页面,之前评论相关的效果都存在,说明没有问题

3、细节处理

  • 1、ajax返回的日期
    • 返回的时间 --> 时间戳timestamp。指距离格林威治时间1970年01月01日00时00分00秒的秒数
  • 2、CSS样式调整
  • 3、级联删除:
    • DO_NOTHING --> CASCADE级联删除,保证数据完整性
  • 4、django-ckeditor
    在这里插入图片描述

1、ajax返回的日期

我们评论一条,日期少了8小时,但我们刷新页面之后,这个时间恢复正常
在这里插入图片描述
在这里插入图片描述
这里,我们在处理表单的时候,在comment/views.py中,这里返回的评论日期时间,我们直接格式化了,格式化会去掉时区的信息。这里需要用到时间戳
在这里插入图片描述
然后我们在blog_detail.html定义一个方法,用来转换时间戳
在这里插入图片描述
在这里插入图片描述
刷新页面
在这里插入图片描述

2、CSS样式调整

修改blog_detail.html如下:
在这里插入图片描述
修改blog.css如下:
在这里插入图片描述
刷新页面
在这里插入图片描述

3、级联删除

我们先增加comment/admin.py里面显示的字段:
在这里插入图片描述
刷新后台页面,没有root的,说明是顶级评论。
在这里插入图片描述
这里我们尝试删除其中一条顶级评论,会发现报错。这是因为DO_NOTHING有问题,我们查看官方文档(https://docs.djangoproject.com/en/2.0/ref/models/fields/),CASCADE:级联删除,删除包含ForeignKey的对象。例如,我们在删除用户User的时候,它会把用户相关联的数据都给删除,而DO_NOTHING就对应不到。
这里我们就需要把DO_NOTHING全部替换成CASCADE,使用sublime里面的全部替换方法进行替换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后刷新页面,再删除,就能删除成功。删除评论之外,还会删除对应的回复
在这里插入图片描述

4、django-ckeditor

点击后台某篇博客的时候,出现错误:
在这里插入图片描述
修改settings.py如下:
在这里插入图片描述
刷新后台页面,显示正常
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值