Django中ListView 和 DetailView类的区别

在Django中,ListView 和 DetailView都是基于类的视图,在处理请求时通常会自动调用render_to_response函数,但由于项目需求不同,实现时需要重写render_to_response函数

ListView 和 DetailView介绍

  • ListView 介绍
  • 主要用于展示一个模型的多个实例(即一个查询集)。
  • 在处理请求时,会自动获取查询集并将其传递给模板。
  1. DetailView:
  • 主要用于展示一个模型的单个实例。
  • 在处理请求时,会根据 URL 中的参数获取特定对象并将其传递给模板。

render_to_response函数的使用案例

  • 继承ListView类
bash 复制代码
class SightTicketListView(ListView):
    # 景点门票列表
    paginate_by = 10
    def get_queryset(self):
    #     根据景点id查询
        sight_id = self.kwargs.get('pk',None)
        return Ticket.objects.filter(is_valid=True,sight=sight_id)

    def render_to_response(self, context, **response_kwargs):
        page_obj = context['page_obj']
        if page_obj is not None:
            data = serializers.TicketListSerializers(page_obj).to_dict()
            return http.JsonResponse(data)
        return NotFoundJsonResponse()
  • 继承DetailView类
bash 复制代码
class SightInfoDetailView(DetailView):
    # 当地址pk为none为空时,以下配置会生效
    pk_url_kwarg = None
    # url中参数的名称
    slug_url_kwarg = 'pk'
    # url中pk对应的哪一个字段(数据库中的字段)
    slug_field = 'sight__pk'
    # 景点详情
    def get_queryset(self):
    #     根据id获取景点详情
        return Info.objects.all()

    def render_to_response(self, context, **response_kwargs):

        page_obj = context['object']
        if page_obj is not None:
            data = serializers.SightInfoSerializer(page_obj).to_dict()
            return http.JsonResponse(data)
        return NotFoundJsonResponse()

context['page_obj'] 和 context['object'] 在 Django 的类视图中有不同的用途:

  • context['page_obj']:
    • 主要用于 ListView 中,表示分页的对象,包含当前页面的数据以及分页信息。
    • 可以用于渲染分页导航,例如显示当前页、总页数等。
  1. context['object']:

    • 用于 DetailView 中,表示当前请求的单个对象实例。
    • 直接用于渲染该对象的详细信息。

总结

  • 使用 context['page_obj'] 时,通常涉及多个对象的分页展示。
  • 使用 context['object'] 时,主要关注单个对象的展示。
相关推荐
步步为营DotNet4 分钟前
深度解析DbContext ChangeTracker:实体状态管理与性能优化
数据库·oracle·性能优化
南棱笑笑生4 分钟前
20251205在ubuntu20.04.6下的打包/解压缩tar.bz2压缩包的方法
数据库·postgresql
java_logo5 分钟前
PGADMIN4 Docker 容器化部署指南
运维·数据库·docker·postgresql·容器·数据库系统
a3722107745 分钟前
HikariCP配置 高并发下连接泄漏避免
java·数据库·oracle
缺点内向11 分钟前
如何在C#中添加Excel文档属性?
开发语言·数据库·c#·.net·excel
生信大表哥15 分钟前
生物信息分析:Singularity容器技术深度解析与实战指南
数据库·r语言·rstudio·生信入门·数信院生信服务器
千百元17 分钟前
实时监控磁盘I/O性能
linux·运维·数据库
虹科网络安全20 分钟前
艾体宝干货 | Redis Python 开发系列#6 缓存、分布式锁与队列架构
redis·python·缓存
猎人everest20 分钟前
Django Rest Framework (DRF) 核心知识体系梳理与深度讲解
后端·python·django
卿雪21 分钟前
缓存异常:缓存击穿、缓存穿透、缓存雪崩 及其解决方案
java·数据库·redis·python·mysql·缓存·golang