十八、Django2.1 搭建多用户的博客网站——文章评论功能

目录:Django 2.1 从零开始搭建博客网站系列

服务器环境搭建(选学)

  • 在阿里云服务器从零开始上线Django项目:Ubuntu18.04+Python3+Django2,并通过公网IP访问

小试牛刀——简单的博客网站

  • 一、Django2.1 搭建简单的博客网站
  • 二、Django2.1 搭建简单的博客网站扩展——自定义模板和静态文件位置

庖丁解牛——多用户的博客网站之用户模块

  • 三、Django2.1 搭建多用户的博客网站——登录
  • 四、Django2.1 搭建多用户的博客网站——注册
  • 五、Django2.1 搭建多用户的博客网站——修改密码
  • 六、Django2.1 搭建多用户的博客网站——重置密码
  • 七、Django2.1 搭建多用户的博客网站——维护个人详细信息
  • 八、Django2.1 搭建多用户的博客网站——头像上传
  • 九、Django2.1 搭建多用户的博客网站——用户模块小结

庖丁解牛——多用户的博客网站之文章模块

  • 十、Django2.1 搭建多用户的博客网站——文章栏目
  • 十一、Django2.1 搭建多用户的博客网站——简单的文章发布
  • 十二、Django2.1 搭建多用户的博客网站——使用Markdown发布文章
  • 十三、Django2.1 搭建多用户的博客网站——修改和删除文章
  • 十四、Django2.1 搭建多用户的博客网站——向用户展示文章
  • 十五、Django2.1 搭建多用户的博客网站——文章模块小结

华丽转身——多用户的博客网站之扩展功能

  • 十六、Django2.1 搭建多用户的博客网站——文章点赞功能
  • 十七、Django2.1 搭建多用户的博客网站——统计文章浏览次数
  • 十八、Django2.1 搭建多用户的博客网站——文章评论功能
  • 十九、Django2.1 搭建多用户的博客网站——使用自定义模板标签
  • 二十、Django2.1 搭建多用户的博客网站——文章标签
  • 二十一、Django2.1 搭建多用户的博客网站——美图模块
  • 未完待续

项目源码下载:https://github.com/jt1024/lehehe

正文:

1、数据模型类和表单类

在 ./article/models.py 中增加 Comment

class Comment(models.Model):
    article = models.ForeignKey(ArticlePost, on_delete=models.CASCADE, related_name="comments")
    commentator = models.CharField(max_length=90)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return "Comment by {0} on {1}".format(self.commentator.username, self.article)

在 ./article/forms.py 中增加 CommentForm

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ("commentator", "body",)

2、视图函数

修改 ./article/list_views.py 中的 article_detail 方法

def article_detail(request, id, slug):
    article = get_object_or_404(ArticlePost, id=id, slug=slug)
    total_views = r.incr("article:{}:views".format(article.id))
    r.zincrby('article_ranking', 1, article.id)

    article_ranking = r.zrange("article_ranking", 0, -1, desc=True)[:10]
    article_ranking_ids = [int(id) for id in article_ranking]
    most_viewed = list(ArticlePost.objects.filter(id__in=article_ranking_ids))
    most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))

    if request.method == "POST":
        comment_form = CommentForm(data=request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.article = article
            new_comment.save()
    else:
        comment_form = CommentForm()

    return render(request, "article/list/article_content.html", {"article": article, "total_views": total_views, "most_viewed": most_viewed, "comment_form": comment_form})

3、视图模板

修改 ./templates/article/list/article_content.html 在点赞代码之后增加如下代码

本文有{{ comments.count }}评论

{% for comment in article.comments.all %}

{{ comment.commentator }}说:

{{ comment.body }}

{% empty %}

没有评论

{% endfor %}

看文章,发评论,不要沉默

{% csrf_token %}
{{ comment_form.commentator}}
{{ comment_form.body }}

修改后的完整代码如下

{% extends "base.html" %}
{% load staticfiles %}
{% block title %}articles list{% endblock %}
{% block content %}

{% with total_likes=article.users_like.count users_like=article.users_like.all %}

{{ article.title }}

{{ article.author.username }} {{ total_likes }}like{{ total_likes|pluralize }} {{ total_views }} view{{ total_views|pluralize}}

点赞本文的读者

{% for user in article.users_like.all %}

{{user.username}}

{% empty %}

还没有人对此文章表态

{% endfor %}

本文有{{ comments.count }}评论

{% for comment in article.comments.all %}

{{ comment.commentator }}说:

{{ comment.body }}

{% empty %}

没有评论

{% endfor %}

看文章,发评论,不要沉默

{% csrf_token %}
{{ comment_form.commentator}}
{{ comment_form.body }}

最受欢迎文章

    {% for article_rank in most_viewed %}
  1. {{ article_rank.title }}
  2. {% endfor %}
{% endwith %} {% endblock %}

4、测试效果

打开文章详情,刷新页面,查看效果


十八、Django2.1 搭建多用户的博客网站——文章评论功能_第1张图片
文章详情

你可能感兴趣的:(十八、Django2.1 搭建多用户的博客网站——文章评论功能)