专栏首页数据云团Django源码学习-8-ListView 通用视图-续

Django源码学习-8-ListView 通用视图-续

Django源码学习-8-ListView&DetailView通用视图

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

视图负责接受一个 HttpRequest,并返回 HttpResponse 或 抛出异常(Http404)。请求网站页面是get请求,提交表单为post请求,可通过继承View类来自动识别请求,如果为get,自动调用get方法,为post就自动调用POST方法。

from django.views.generic import ListView

ListView

通过重写queryset, template_name和context_object_name来完成ListView的自定义,还可以通过重写get_context_data方法传递额外的参数或内容。

context_object_name [get_context_object_name()]
extra_context
model
queryset
用来代替 model, 比如: Publisher.objects.all()[:10]  
模板 context 中的变量名会有 object_list, <model_name>_list (publisher_list),拥有相同数据
ordering
一个字符串或数组,传给 queryset; 相当于:queryset.objects.order_by()
allow_empty
paginate_by [get_paginate_by()]
每页的 object 的数量,页数用 request.GET (?page=1) 或 path('<int:page>\', PublisherList.as_view()) 指明;
 (第一页是: ?page=1, 最后一页是:?page=last)
paginate_orphans
指明最后一页最多可以有几个 object (正常+溢出)
template_name [get_template_names()]
template_name_suffix:默认为 '_list'
allow_empty
默认为 True (False 表示 object_list 为 空时,显示 404)
get_context_data()
可以添加额外的模板 context , 默认将 model / queryset 指定的 objects 添加到模板 context
get_queryset()
默认返回属性 queryset
from django.views.generic import ListView

class PublisherBookList(ListView):

    template_name = 'books/books_by_publisher.html'

    def get_queryset(self):
        self.publisher = get_object_or_404(Publisher, name=self.kwargs['publisher']) # 根据链接提取除publisher
        return Book.objects.filter(publisher=self.publisher)  # 筛选出该出版社的所有书籍

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in the publisher
        context['publisher'] = self.publisher  # 将 publisher 添加到 模板 context
        return context

本文分享自微信公众号 - 数据云团(SmartData),作者:云团小楠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django基础篇-上下文处理器

    在 settings.py 中,包含了当前使用的上下文处理器。它的作用是可以给每一个 response 都提供想要添加的参数。

    小团子
  • Django源码学习-12-ContextMixin 上下文

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • Django进阶-1-ORM操作

    Django 的 orm 操作本质上会根据对接的数据库引擎,翻译成对应的 sql 语句;所有使用 Django 开发的项目无需关心程序底层使用的是 Mysql、...

    小团子
  • ExtJs学习笔记(2)_Basic GridPanel[基本网格]

    这一节,将学习如何使用网络上最常见的UI控件_Grid 1.静态示例: 静态示例其实官方下载包里,就有sample,这里只贴出代码,后面的如何跟WCF结合,做出...

    菩提树下的杨过
  • 数据迁移判断非空约束(r2笔记45天)

    在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。 为了更好的对...

    jeanron100
  • jQuery将form列表转JSON

    week
  • if __name__ == '__main__' 如何正确理解

    朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'),

    yaohong
  • ThreadLocal的进化——InheritableThreadLocal

    之前有介绍过 ThreadLocal,JDK 后来针对此做了一个升级版本 InheritableThreadLocal,今天就来好好介绍下。

    健程之道
  • 携号转网怎么突然悄无声息了?是否应该取消这项业务?

    近日,有全国政协委员向媒体指出,据其调查发现,携号转网政策在实施过程中出现了运营商非法无序竞争、伤害消费者、滋生腐败等问题,建议工信部暂停。事实上,如果不是该政...

    悲了伤的白犀牛
  • 连仕彤博客yum报错:No module named gzip解决

    起因 小威wei yum update了一把,结果yum就报错了,Python版本并没有升级,依然是2.7.5版本。 报错信息 [root@localhost ...

    行 者

扫码关注云+社区

领取腾讯云代金券