当前位置: 首页 > 后端技术 > Python

Django20200424博客开发020

时间:2023-03-26 13:33:37 Python

评论数的效果如下:如何获取评论数:方法:使用filter过滤后再使用count方法统计count问题:页面和代码比较复杂。先实现里面的样式然后在blog/views.py中的blog_detail函数中填写context['comment_count']=Comment.objects.filter(content_type=blog_content_type,object_id=blog.pk).count()然后添加评论blog_detail.html中的阅读下方

  • 评论数:{{comment_count}}
  • 效果如下:然后在实现列表中显示评论数:如果使用与阅读量相同的方法(创建一个方法,然后让视图处理函数继承方法再调用),会很麻烦。这里使用template标签:例如:在comment中新建一个templatetags包,然后在templatetags中新建一个comment_tags.py文件。内部代码如下:#emplatetags/comment_tags.pyfromdjangoimporttemplateregister=template.Library()@register.simple_tagdeftest():return'thisisatestcode'然后加载blog_detail.html中的comment_tag:{%loadcomment_tag%}...
  • Comment...
  • {%test%}
  • 效果如下:具体操作:重写comment_tags.py中的内容fromdjangoimporttemplatefromdjango.contrib。contenttypes.modelsimportContentTypefrom..modelsimportCommentfrom..formsimportCommentFormregister=template.Library()@register.simple_tagdefget_comment_count(obj):内容ype.objects.get_for_model(obj)returnComment.objects.filter(content_type=content_type,object_id=obj.pk).count()增加blog_list.html下面{%loadcomment_tags%}...的评论阅读数。..评论数:{%get_comment_countblog%}然后效果如下:使用自定义模板标签:对应blog/views.py中的context['comment_form']首先在comment_tags.py中定义一个get_comment_form获取评论表单(参数是对象)from..formsimportCommentForm...@register.simple_tagdefget_comment_form(obj):content_type=ContentType.objects.get_for_model(obj)form=CommentForm(initial={'content_type':content_type.model,'object_id':obj.pk,'reply_comment_id':0})returnform在blog_detail.html下面的csrf下添加如下代码:{%get_comment_fromblogascomment_form%}然后,为了避免两个comment_forms的干扰,去掉blog/views.py中comment_form(context['comment_form']行)效果如下s:继续在comment\_tags.py中添加一个函数:获取评论列表并排序返回@register.simple_tagdefget_comment_list(obj):content_type=ContentType.objects.get_for_model(obj)comments=Comment.objects.filter(content_type=content_type,object_id=obj.pk,parent=None)returncomments.order_by('-comment_time')在前端使用上面写的方法:blog_detail.htmlcommentlist{%get_comment_listblogascomments%}然后去掉blog/views.py中的context['comments']内容,再去掉comments和blog_content_type,没用的作为如下:小问题处理:针对问题1,将comment/views.py中的strftime替换为timestamp:timestamp(返回一个数字)然后修改blog\_detail.html:functionnumFormat(num){return('00'+num).substr(-2);}functiontimeFormat(timestamp){vardatetime=newDate(timestamp*1000);varyear=datetime.getFullYear();varmonth=numFormat(datetime.getMonth);()+1varday=numFormat(datetime.getDate());varhour=numFormat(datetime.getHours());varminute=numFormat(datetime.getMinutes());varearsecond=numFormat(datetime.getHours());+'-'+月+'-'+日+''+h我们的+':'+分钟+':'+秒;}对于问题2:css样式调整blog.cssadddicv#reply_content_containerdiv#reply_content_container{border:1pxsolid#d1d1d1;底部边框:无;背景色:#f8f8f8;溢出:隐藏;padding:1em1em0.5em;}p#reply_title{border-bottom:1pxdashed#ccc;padding-bottom:0.5em;}在对应的blog_detail.html标签中添加class
    回复:

    cascadedeleteforon_delete=models.DO_NOTHING说明:也就是当on_delete=DO\_NOTHING时,例如对于一条评论如下:如果删除这条评论,后面的回复依然存在;但如果on_delete=models.CASCADE,则后者会被删除,相关回复一并删除;所以把文件中的DO_NOTHING全部替换成models.CASCADE,一共有9个django-ckeditor:添加评论模块后,后台blogs中的博文修改页面会出错:设置里面没有默认,在这个此时在mysite/settings中的CKEDITOR_CONFIGS中添加default:这时候就可以正常修改了: