本文解决 Django ListView 中因错误覆盖 context_object_name 导致上下文为空的问题,详解如何安全地按登录用户过滤照片、保留分页与默认行为,并提供可复用的代码实践与关键注意事项。 本文解决 django listview 中因错误覆盖 `context_object_name` 导致上下文为空的问题,详解如何安全地按登录用户过滤照片、保留分页与默认行为,并提供可复用的代码实践与关键注意事项。在 Django 的 ListView 中,若需让每个登录用户仅查看自己上传的照片,绝不能直接覆写 context'photos' 为新的 QuerySet------这会破坏 ListView 内置的分页逻辑(如 page_obj、is_paginated)、对象计数及默认上下文结构,导致模板中 photos 变为空或分页失效。根本问题在于:你调用了 super().get_context_data(),但随后用 context'photos' = ... 完全替换了由 ListView 自动注入的、已包含分页信息的 QuerySet。正确做法是在 get_queryset() 中完成数据过滤,让 ListView 基于过滤后的 QuerySet 自动构建完整上下文。? 正确实现如下:# views.pyfrom django.contrib.auth.mixins import LoginRequiredMixinfrom django.views.generic import ListViewclass PhotoList(LoginRequiredMixin, ListView): model = Photo template_name = 'main/gallery.html' context_object_name = 'photos' paginate_by = 12 # 可选:启用分页 def get_queryset(self): # 始终从当前用户出发过滤 qs = Photo.objects.filter(user=self.request.user) # 按 category 参数进一步筛选(若提供) category_name = self.request.GET.get('category') if category_name: qs = qs.filter(category__name=category_name) return qs def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 仅添加额外上下文,不干扰 photos 主体 context'categories' = Categories.objects.all() return context? 关键说明: 橙篇 百度文库发布的一款综合性AI创作工具
相关推荐
星恒随风5 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例投图匠7 小时前
十种不同风格的 CTP接口 框架吴名氏.7 小时前
Java转AI Agent教程(第十三周)混合检索与重排爱码少年8 小时前
Springboot下如何将CSV文件数据导入H2、Mysql数据库表2601_967980118 小时前
深入理解词向量算法及其在Python中的实践129Lab9 小时前
电池循环测试数据自动化分析:用Python+AI工具构建一键式寿命评估流水线treasure1409 小时前
【复古】浅尝Django前后端不分离可乐ea9 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文Dmz丶10 小时前
前端转 AI 100 天 Day 44:前端集成实战——用 React 给 Agent 做个正式界面jay神10 小时前
基于 YOLOv8 的手势识别系统(Web 版)