http://blog.csdn.net/thinkinside/article/details/7251130
如果对Django的基础部分尚不熟悉,请参考《Django实战》系列。
欢迎访问Django专栏:http://blog.csdn.net/column/details/django.html
内容提要
1. 回顾Django的视图函数(view function)
2. 在视图函数中使用模板
3. 简化视图函数的两个工具
4. 使用通用视图函数
5. Django提供的通用视图
1. 回顾Django的视图函数(view function)
....................................................................
2. 在视图函数中使用模板
视图函数返回的response对象中包含一些头(Header)信息和内容(Content),而我们通常通过模板来生成内容,所以我们经常用到的视图函数应该是这样:
3. 简化视图函数的两个工具
总是写这样的代码实在是让人厌倦,所以Django为我们提供了两个有用的工具:
一个是django.shortcuts.render_to_response函数,接收一系列的参数,包括模板路径、context使用的字典、原始的context实例以及要设定的mimetype等:
render_to_response(template_path_name, dictionary=None, context_instance=None, mimetype=None)
另一个是locals()函数,将所有的局部变量组装成一个字典。
有了这两个工具,视图函数就可以这样写:
4. 使用通用视图函数
有了这两个工具,编写视图函数确实可以简化很多。但是这样你就满意了吗?Django并没有就此止步,更进一步注意到,很多视图函数其实都在做同样 的事情,比如显示一组模型对象的列表,显示模型对象的详细信息,对模型对象的增、删、改操作等。为了简化对这些情况的处理,Django定义了一系列的通 用视图(generic views),我们只需要使用这些内置的通用视图函数,而无需自己编写就可以实现相应的功能。
使用通用视图的方法是在URLconf文件中创建参数字典,将字典作为URLconf元组的第三个成员,即可自动在调用视图函数时向其传递参数了。 比如在django.views.generic.list_detail模块中的object_list函数,用于显示模型对象的列表,可以接受 queryset参数作为模型对象的结果集。如果我们要用该视图函数显示在《Django实战》系列中的创建的第一个模型类Product的列表,可以在URLconf中这样配置:
除了queryset外,object_list函数还可以接收许多其他的参数:
- template_name=
- context_processors=
通用视图函数接收到参数后,会创建context,并渲染模板,最后返回HTTPResponse对象。object_list函数创建的context中会包含以下字典项:
object_list 要显示的对象的list
is_paginated 是否分页
results_per_page 如果分页,存储每页记录数
has_next 是否有下一页
has_previous 是否有上一页
page 当前页码
next 下一页
previous 上一页
pages 总页数
hits 总条目数
last_on_page 本页最后录一条记录的序数(从1开始)
first_on_page 本页第一条记录的序数(从1开始)
page_range 页码范围的列表
如果这些context字典项不能满足你的需要,还可以通过指定extra_context参数,传入一个字典,该字典中的内容会被合并到context字典中。
context字典项会被模板使用。如果不指定模板,该函数将使用[app_name]/[model_name]_list.html作为模板,指定模板的方法也是通过参数字典,比如:
除了object_list外,Django还提供了许多通用视图函数,分布在几个模块中:
django.views.generic.list_detail模块
- object_list 显示模型对象列表
- object_detail 显示单个模型对象
django.views.generic.create_update模块
- create_object 创建模型对象
- update_object 修改模型对象
- delete_object 删除模型对象
django.views.generic.simple模块
- direct_to_template 直接使用指定的模板渲染给定的context对象
- redirect_to 重定向到指定的url
django.views.generic.date_based模块
这个模块主要处理“按时间查看存档”的功能,来源于新闻出版行业。具体包括:
- archive_index 最顶级的归档,列出所有年份及指定数量的最新对象
- archive_year 按年归档,列出所有拥有对象的月份
- archive_month 按月归档,列出本月的所有对象,找到拥有对象的上一个、下一个月份
- archive_week 按周归档,列出本周的所有对象
- archive_day 按日归档,列出当天的所有对象,找到拥有对象的上一个、下一个日期
- archive_today 当前日期(今天)的按日归档
- object_detail 显示按照年/月/日/序号找到的对象
这些通用视图函数不再一一介绍,可以参考Django API文档,关注其参数,context内容和默认模板,就能基本掌握其使用。
相关推荐
Chapter 1: Coding Style Chapter 2: The Optimal Django Environment Setup Chapter 3: How to Lay Out Django Projects Chapter 4: Fundamentals of Django App Design Chapter 5: Settings and Requirements ...
django-extra-views, 基于 Django的通用视图类非常棒,让我们来更多 django-extra-views-- Django的基于类的通用视图基于 Django 通用视图的类很好,它们让你可以在相对较少的代码行中完成大量的web应用程序设计模式...
django教程:基本操作笔记整理.png
django-extra-views:Django的基于类的通用视图很棒,让我们拥有更多的视图
Django实践:学生管理系统(web网页版)代码
django-generic-scaffold:为django快速生成CRUD通用视图!
Python Django Web典型模块开发实战_用Django设计大型电商的类别表_编程项目案例实例详解课程教程.pdf
本文包含:Django框架基础知识、Django视图和模板、Django框架和模型和django框架后台、Django框架实战:开发企业官网、Rest Framework 、Vue前端、Vue+Django综合项目;Vue前端对接:通过Vue与后端API进行数据交互...
django mongogeneric mongoengine文档的基于类的通用视图。笔记并非Django提供的所有视图都已实现。 如果发现缺少mixin或视图,请随时实现它们并提供拉取请求:-)要求的Django> = 1.3 > = 0.6 已实施的意见详细视图...
Chapter 1: Introduction to the Django Framework Chapter 2: Django Urls and Views Chapter 3: Django Templates Chapter 4: Jinja Templates in Django Chapter 5: Django Application Management Chapter 6: ...
Django Web专案 博客网 ful이버스데리터를리트로여주고여주고ful터젝트젝트젝트젝트젝트젝트공하는공하는공하는ful ful ful 功能 新闻爬行 它 경제 스포츠 搜索关键词 选择发布 博客 书签 REST API 目录树 . ├─...
Django学生管理后台学生处理视图
django-payments:Django的通用付款处理
django-mashup django-mashup 是 Django 框架的视图混搭器。... )用django-mashup 提供了一个视图类: from mashup.views import MashUp和三个组件类: from mashup.views import URLMash, TemplateMash, ViewMash例
Django示例:Django使用
为了将代码放在某处,约定是将视图放在一个名为的文件中views.py,该文件位于项目或应用程序目录中。 Django有3种视图: 函数视图 FBV 类视图 CBV 通用视图 CBGV 函数视图 FBV 通过条件分支来处理不同http请求 # ...
django-sliver适用于Django的轻量级REST API建立在通用视图之上为什么选择django-sliver? Sliver是为仅需要简单API的前端(等)的站点设计的,而没有像这样的解决方案。 注意事项: 它基于Django的通用视图构建,...
Django全局必需登录中间件(django-glrm)是Django中间件,它使所有视图和URL均需登录。 在Django中,大多数站点页面都是受保护的,除了少数公共页面(例如登录页面等),这是很常见的。 用@login_required装饰...
dblog:django练习:个人博客系统开发
:第1部分:请求和响应<intro/tutorial01>`| 第2部分:模型和管理站点<intro/tutorial02>`| 第3部分:视图和模板<intro/tutorial03>`| 第4部分:窗体和通用视图<intro/tutorial04>`| 第5部分:测试...