You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Django ListView实现点击用户名查看用户全部评论?

实现点击用户名跳转至用户所有评论列表的Django方案

嘿,我来帮你搞定这个需求!其实用Django的ListView实现这个功能很清晰,咱们一步步来:

1. 确保模型关联正确

首先要保证你的Comment模型和User模型有正确的外键关联,并且设置好related_name,这样能方便我们通过用户实例获取所有评论:

# models.py
from django.db import models
from django.contrib.auth.models import User
from .models import Article  # 假设你的文章模型是Article

class Comment(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments')
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    # 其他自定义字段...

这里的related_name='comments'很关键,它让我们可以通过user.comments.all()直接拿到该用户的所有评论。

2. 配置URL路由

在你的应用urls.py里添加一个新的路由,用来接收用户标识(可以是ID或用户名),并映射到我们即将创建的ListView:

# urls.py
from django.urls import path
from .views import UserCommentListView

urlpatterns = [
    # 你的其他URL配置...
    # 用用户ID的方式
    path('user/<int:pk>/comments/', UserCommentListView.as_view(), name='user_comments'),
    # 如果想用用户名代替ID,可以改成下面这行:
    # path('user/<str:username>/comments/', UserCommentListView.as_view(), name='user_comments'),
]

3. 编写UserCommentListView视图

接下来在views.py里创建ListView,它负责过滤指定用户的评论,并传递给模板:

# views.py
from django.views.generic import ListView
from django.contrib.auth.models import User
from .models import Comment

class UserCommentListView(ListView):
    model = Comment
    template_name = 'user_comments_list.html'  # 展示用户评论的模板路径
    context_object_name = 'comments'  # 模板中用来调用评论列表的变量名
    paginate_by = 10  # 可选,添加分页功能,每页显示10条评论

    def get_queryset(self):
        # 根据URL参数获取目标用户,过滤出该用户的所有评论并按时间倒序排列
        # 如果用用户ID:
        target_user = User.objects.get(pk=self.kwargs.get('pk'))
        # 如果用用户名,替换成下面这行:
        # target_user = User.objects.get(username=self.kwargs.get('username'))
        return target_user.comments.all().order_by('-created_at')
    
    def get_context_data(self, **kwargs):
        # 把目标用户对象传递到模板,方便显示用户名等信息
        context = super().get_context_data(**kwargs)
        # 如果用用户ID:
        context['target_user'] = User.objects.get(pk=self.kwargs.get('pk'))
        # 如果用用户名:
        # context['target_user'] = User.objects.get(username=self.kwargs.get('username'))
        return context

4. 修改原有评论列表模板

把你原来模板里的用户名改成链接,指向我们刚配置的user_comments路由:

{% for comment in article.comments.all %}
<ul class="list-group">
    <li class="list-group-item">
        <!-- 这里把用户名改成跳转链接 -->
        <a href="{% url 'user_comments' comment.user.pk %}">{{ comment.user.username }}</a>
        <!-- 如果用用户名的话,替换成下面这行: -->
        <!-- <a href="{% url 'user_comments' comment.user.username %}">{{ comment.user.username }}</a> -->
        <p>{{ comment.content }}</p>
        <small>{{ comment.created_at }}</small>
    </li>
</ul>
{% endfor %}

5. 创建用户评论列表模板

最后创建user_comments_list.html模板,用来展示指定用户的所有评论:

<!-- user_comments_list.html -->
<h2>{{ target_user.username }}的所有评论</h2>
<ul class="list-group">
    {% for comment in comments %}
    <li class="list-group-item">
        <!-- 可以添加跳转到对应文章的链接 -->
        <a href="{% url 'article_detail' comment.article.pk %}">{{ comment.article.title }}</a>
        <p>{{ comment.content }}</p>
        <small>发表于:{{ comment.created_at }}</small>
    </li>
    {% empty %}
    <li class="list-group-item">该用户还没有发表任何评论哦</li>
    {% endfor %}
</ul>

<!-- 分页控件(如果启用了paginate_by) -->
{% if is_paginated %}
<nav aria-label="评论分页导航">
    <ul class="pagination">
        {% if page_obj.has_previous %}
        <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a></li>
        {% endif %}
        {% for num in page_obj.paginator.page_range %}
        <li class="page-item {% if page_obj.number == num %}active{% endif %}">
            <a class="page-link" href="?page={{ num }}">{{ num }}</a>
        </li>
        {% endfor %}
        {% if page_obj.has_next %}
        <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a></li>
        {% endif %}
    </ul>
</nav>
{% endif %}

这样就完成啦!点击评论里的用户名,就能跳转到该用户的所有评论列表页面了。

内容的提问来源于stack exchange,提问作者user1563247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:28