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. Nancy简单实战之NancyMusicStore(五):部署上线

    前言 经过本系列前面四篇文章,NancyMusicStore已经开发完成了,下面就差部署上线了,我们会在两个不同的环境部署.其实之前的文章也有讲解在 Linux下部署的相关事宜.下面开始本文的内容. ...

  2. Spark:控制日志输出级别

    Spark:控制日志输出级别 终端修改 在pySpark终端可使用下面命令来改变日志级别 sc.setLogLevel("WARN") # 或者INFO等 修改日志设置文件 ** ...

  3. 如何用JS/HTML将时间戳转换为“xx天前”的形式【附源码,转

    如果我们有一份过去时间戳,如何使用JS/HTML将时间戳转换为"xx天前"的形式呢,以下是完整代码 <!DOCTYPE html> <html> <h ...

  4. NAT详解

    1.为什么出现了NAT? IP地址只有32位,最多只有42.9亿个地址,还要去掉保留地址.组播地址,能用的地址只有36亿左右,但是当下有数以万亿的主机,没有这么多IP地址怎么办,后面有了IPv6,但是 ...

  5. HUST 1586 数字排列

    1586 - 数字排列 时间限制:1秒 内存限制:128兆 91 次提交 36 次通过 题目描述 现有n个k位的数字,你的任务是重新安排数字每一位的位置,使得重新安排后这n个数字中最大的数字和最小的数 ...

  6. Java实现二叉树的前序、中序、后序遍历(递归方法)

      在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了.   二叉树的遍历方法分为三种,分别为前序遍历.中序遍历.后序遍历.下图即为一个二叉 ...

  7. linux虚拟机CentOS 7完整安装流程截图

    安装VMware虚拟机过程此处省略,只介绍在虚拟机上安装linux系统CentOS 7过程截图. 1 新建虚拟机 2 命名虚拟机,选择linux安装位置 3 选择虚拟机处理器数量和处理器核心数 4 分 ...

  8. 剖析Asp.Net Web API路由系统---WebHost部署方式

    上一篇我们剖析了Asp.Net路由系统,今天我们再来简单剖析一下Asp.Net Web API以WebHost方式部署时,Asp.Net Web API的路由系统内部是怎样实现的.还是以一个简单实例开 ...

  9. js设置、获取、清除cookie

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. gvim生存配置

    set guioptions-=Tcolorscheme desert set clipboard+=unnamedset mouse=a winpos 200 50set lines=20 colu ...