ListView (带分页)

1.带分页效果的基础模板

1) view

from django.views.generic.list import ListView

from employ.models import Company

class CompanyListView(ListView):
model = Company
context_object_name = "companies"
template_name = 'company/company_list.html'
paginate_by = 20

2) url

from django.conf.urls import url
from . import views urlpatterns = [
url(r'^$', views.CompanyListView.as_view(), name='company-list'), ]

3) template

<table class="table table-striped">
<thead>
<tr>
<th>名称</th>
<th>规模</th>
</tr>
</thead>
<tbody>
{% for company in companies %}
<tr>
<td>{{ company.name }}</td>
<td>{{ company.scale }}</td>
</tr>
{% endfor %}
</tbody>
</table> {% if is_paginated %}
<div class="pagination center-block">
<span>共{{ page_obj.paginator.num_pages }}页</span>
<span id="paging" class="step-links" style="display: block;text-align: center">
{% if page_obj.has_previous %}
<span><a href="?page={{ page_obj.previous_page_number }}">上一页</a></span>
{% endif %}
<span class="active">{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<span><a href="?page={{ page_obj.next_page_number }}">下一页</a></span>
{% endif %}
</span>
</div>
{% endif %}

2.model < queryset < get_queryset()

这时候,页面上显示是model里的所有对象。如果我们希望这个object list排序后呈现呢?或者想要筛选部分呈现?这些又在哪定义呢?

很简单,这时候只要定义queryset或者重写get_queryset()方法就能搞定。

注意:model、queryset、get_queryset()至少要定义一个。而当三个都定义的时候,get_queryset()的效果强于queryset,而queryset的效果又强于model。

2.1 定义queryset

from django.views.generic.list import ListView

from employ.models import Company

class CompanyListView(ListView):
context_object_name = "companies"
template_name = 'company/company_list.html'
paginate_by = 20
queryset = Company.objects.all().order_by('-scale')

2.2 重写get_queryset()

from django.views.generic.list import ListView

from employ.models import Company

class CompanyListView(ListView):
context_object_name = "companies"
template_name = 'company/company_list.html'
paginate_by = 20
def get_queryset(self):
companies = Company.objects.all().order_by('-scale')
return companies

3.向template传递额外信息

以上,我们只向template中传递了关于某个Model里的所有对象。那么,我们有什么方法传递更多信息呢?

方法一:重写get_context_data()。如我想传递当前时间显示在template中:

view:

from django.views.generic.list import ListView

from employ.models import Company

from datetime import datetime

class CompanyListView(ListView):
context_object_name = "companies"
template_name = 'company/company_list.html'
paginate_by = 20
queryset = Company.objects.all().order_by('-open_positions') def get_context_data(self, **kwargs):
context = super(CompanyListView, self).get_context_data(**kwargs)
context['now'] = datetime.now()
return context

template:

{{ now }}

方法二:在view中定义some_method()方法返回数据,在模版中使用{{ view.some_method }}。

注意:some_method(self)方法只能有一个self参数。

view:

from django.views.generic.list import ListView

from employ.models import Company

from datetime import datetime

class CompanyListView(ListView):
context_object_name = "companies"
template_name = 'company/company_list.html'
paginate_by = 20
queryset = Company.objects.all().order_by('-open_positions') def now(self):
return datetime.now()

template:

{{ view.now }}

django generic view - ListView的更多相关文章

  1. (生鲜项目)06. django的view实现商品列表页

    使用原始的django的View来返回json格式的商品列表 目的是回顾一些django的基础知识, 好与后面的RESTful做对比 goods.views_base.py from django.v ...

  2. django class-based view 考古

    django 中的view中进化史: 1.在“天地初开”的时候django中的view是通过函数来定义的.函数接收一个request并以一个response作为返回: 对于这个request是通过po ...

  3. Django的View(视图)和路由系统

    一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...

  4. Django的View(视图)

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  5. Django的View(视图层)

    目录 Django的View(视图层) 一.JsonResponse 二.后端接收前端的文件 三. FBV和CBV(源码分析) 四.settings.py配置文件源码分析 五. 请求对象(HttpRe ...

  6. Django @csrf_exempt不适用于基于通用视图的类(Django @csrf_exempt does not work on generic view based class)

    class ChromeLoginView(View): def get(self, request): return JsonResponse({'status': request.user.is_ ...

  7. Django base view

    class django.views.generic.base.View 它是基类的基类,其它View基类都是从这继承的. 官例: from django.http import HttpRespon ...

  8. Django~Test View

    https://docs.djangoproject.com/en/1.9/topics/testing/ http://docs.seleniumhq.org/ Automated testing ...

  9. django开发框架-view & template

    django框架的主要模型是MVT,Model模型,View视图,Template模板,基于基本的HttpRequest方式. django支持的数据库有四种:PostgreSQL,MySQL, Or ...

随机推荐

  1. ubuntu无法进入桌面的修复

    今天的kubuntu更新后停在了启动logo上,无法进入系统界面了. 先在网上找了找,搜到了一个看起来很像的. 1)ubuntu在系统启动logo过后无法进入桌面的处理方法 一般情况下,无法显示桌面, ...

  2. 20个常用的Java程序块

    1.字符串有整型的相互转换 String a = String.valueOf(2);//integer to numeric string Int i = Integer.parseInt(a);/ ...

  3. MD5碰撞后时代,MD5还有存在的意义吗?

    MD5是一种HASH函数,又称杂凑函数,由32位16进制组成,在信息安全范畴有广泛和首要运用的暗码算法,它有类似于指纹的运用.在网络安全协议中, 杂凑函数用来处理电子签名,将冗长的签名文件紧缩为一段一 ...

  4. 深入探讨 ECMAScript 规范第五版

    深入探讨 ECMAScript 规范第五版 随着 Web 应用开发的流行,JavaScript 越来越受到开发人员的重视.作为 ECMAScript 的变体,JavaScript 语言的很多语法特性都 ...

  5. 多线程——NSThread

    创建和启动线程 一个NSThread对象就代表一条线程 // 创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self sele ...

  6. 初识servlet--未完成

    servlet到底是什么呢?今天我们一起看一下. 首先说下servlet是干啥的.servlet主要干这么一个事情:创建动态的问页面. servlet主要的功能是,访问外网,连接外部接口.它可以做如下 ...

  7. 基于C++11的线程池,简洁且可以带任意多的参数

    咳咳.C++11 加入了线程库,从此告别了标准库不支持并发的历史.然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池.信号量等.线程池(thread pool) ...

  8. Swift 2.2 最基本的多线程

    昨天晚上苹果召开了发布会,第二天除了知道 iPhone SE 和 IOS9.3 之外,你还记住了什么,这一天还是老样子,继续着我们的Swift的基本学习,但出现了许多的警告,进去看看文档宝宝才知道 S ...

  9. Android系统之灯光系统--通知灯深入分析

    Android通知灯的深入分析 通知的类别 声音 振动 闪灯 APP如何发出通知灯请求 getSystemService(通知服务) 构造notification 类别 其他参数(颜色,onMS,of ...

  10. JavaSE学习笔记

    1.数据类型 boolean char byte short int long double float double array class interface 总结: 前9种基本类型,后3中引用类 ...