django generic view - ListView
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的更多相关文章
- (生鲜项目)06. django的view实现商品列表页
使用原始的django的View来返回json格式的商品列表 目的是回顾一些django的基础知识, 好与后面的RESTful做对比 goods.views_base.py from django.v ...
- django class-based view 考古
django 中的view中进化史: 1.在“天地初开”的时候django中的view是通过函数来定义的.函数接收一个request并以一个response作为返回: 对于这个request是通过po ...
- Django的View(视图)和路由系统
一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...
- Django的View(视图)
Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...
- Django的View(视图层)
目录 Django的View(视图层) 一.JsonResponse 二.后端接收前端的文件 三. FBV和CBV(源码分析) 四.settings.py配置文件源码分析 五. 请求对象(HttpRe ...
- 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_ ...
- Django base view
class django.views.generic.base.View 它是基类的基类,其它View基类都是从这继承的. 官例: from django.http import HttpRespon ...
- Django~Test View
https://docs.djangoproject.com/en/1.9/topics/testing/ http://docs.seleniumhq.org/ Automated testing ...
- django开发框架-view & template
django框架的主要模型是MVT,Model模型,View视图,Template模板,基于基本的HttpRequest方式. django支持的数据库有四种:PostgreSQL,MySQL, Or ...
随机推荐
- ABP入门系列(7)——分页实现
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
- Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例
Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...
- 在ASP.NET Core下使用SignalR技术
一.前言 上次我们讲到过如何在ASP.NET Core中使用WebSocket,没有阅读过的朋友请参考 WebSocket in ASP.NET Core 文章 .这次的主角是SignalR它为我们提 ...
- Linux Platform驱动模型(二) _驱动方法
在Linux设备树语法详解和Linux Platform驱动模型(一) _设备信息中我们讨论了设备信息的写法,本文主要讨论平台总线中另外一部分-驱动方法,将试图回答下面几个问题: 如何填充platfo ...
- Vue.js 系列教程 ①
原文:intro-to-vue-1-rendering-directives-events 译者:nzbin 如果要我用一句话描述使用 Vue 的经历,我可能会说“它如此合乎常理”或者“它提供给我需要 ...
- haproxy学习
1.安装 # wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz # tar zcvf haproxy-1.3.20.t ...
- C#下控制台程序窗口下启用快速编辑模式运行线程会阻止线程运行
最近做一个小的功能,使用C#控制台程序开启一个线程进行无限循环没5秒处理一次程序,发现控制台窗口在开启快速编辑模式情况下,进行选择程序打印 出来的文字后发现线程不走了,将快速编辑模式去除后,线程就不会 ...
- C#剪贴板对文件的复制、粘贴操作
1.把文件加到剪贴板: System.Collections.Specialied.StringCollection files=new System.Collections.Specialied.S ...
- 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享
很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...
- 基于Ubuntu14.04-LTS下安装docker
1.sudo apt-get update --更新系统源 2.sudo apt-get install docker.io 3.将docker库的公钥中加入到本地apt中 sudo apt-key ...