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 ...
随机推荐
- 玩转spring boot——结合阿里云持续交付
前言 在互联网项目中,项目测试.部署往往需要花费大量时间.传统方式是在本地打包.测试完毕程序,然后通过ftp上传至服务器,再把测试的配置文件修改为生产环境的配置文件,最后重新运行服务.这一过程如果交给 ...
- (二)Hololens Unity 开发之 语音识别
学习源于官方文档 Voice input in Unity 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发之 语音识别 Hol ...
- 深圳尚学堂:JavaScript的常见面试题
经常说编程是一门技术专业,在找工作时面试官肯定不止看你的面试能力,还要看你的专业知识掌握,他可能会让你做一个小的编程测试,或者说考察你的语法知识掌握,今天,总结了一些关于在JavaScript中常常会 ...
- 每日一水之strcmp用法
strcmp函数 C/C++函数,比较两个字符串 设这两个字符串为str1,str2, 若str1==str2,则返回零: 若str1<str2,则返回负数: 若str1>str2,则返回 ...
- 源码(04) -- java.util.List<E>
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...
- 安装软件(基于redhat、centos发行版)
yum 命令的使用: yum local install package_name.rpm 安装本地rpm包yum list updates 列出所有可以更新的安装包yum update packag ...
- java udp (使用类调用双通信)1
项目需要就使用了UDP通信,做了java的双方通信,其实代码还是来自之前的udp学习代码,自己加了注释,并且优化的使用类来封装关于通信类库的使用代码 目的是为了在安卓项目中使用时,可以通过实例化,调用 ...
- Docker网络代理设置
背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可 ...
- 关于jquery尺寸的总结
以前总是对jquery的尺寸稀里糊涂,有需要的可以看下下面的代码: ①页面布局如下: <!doctype html> <html> <head> <meta ...
- C++ 头文件系列(sstream)
1. 简介 这个头文件主要定义了基于字符串类(string类)的流的4个模版: basic_stringbuf basic_istringstream basic_ostringstream basi ...