前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-8-ListView 通用视图-续

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

作者头像
小团子
发布2019-08-06 17:12:38
8310
发布2019-08-06 17:12:38
举报
文章被收录于专栏:数据云团

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

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

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

代码语言:javascript
复制
from django.views.generic import ListView

ListView

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

代码语言:javascript
复制
context_object_name [get_context_object_name()]
代码语言:javascript
复制
extra_context
代码语言:javascript
复制
model
代码语言:javascript
复制
queryset
用来代替 model, 比如: Publisher.objects.all()[:10]  
模板 context 中的变量名会有 object_list, <model_name>_list (publisher_list),拥有相同数据
代码语言:javascript
复制
ordering
一个字符串或数组,传给 queryset; 相当于:queryset.objects.order_by()
代码语言:javascript
复制
allow_empty
代码语言:javascript
复制
paginate_by [get_paginate_by()]
每页的 object 的数量,页数用 request.GET (?page=1) 或 path('<int:page>\', PublisherList.as_view()) 指明;
 (第一页是: ?page=1, 最后一页是:?page=last)
代码语言:javascript
复制
paginate_orphans
指明最后一页最多可以有几个 object (正常+溢出)
代码语言:javascript
复制
template_name [get_template_names()]
代码语言:javascript
复制
template_name_suffix:默认为 '_list'
代码语言:javascript
复制
allow_empty
默认为 True (False 表示 object_list 为 空时,显示 404)
代码语言:javascript
复制
get_context_data()
可以添加额外的模板 context , 默认将 model / queryset 指定的 objects 添加到模板 context
代码语言:javascript
复制
get_queryset()
默认返回属性 queryset
代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档