Django框架中的对象列表视图使用示例


Posted in Python onJuly 21, 2015

direct_to_template 毫无疑问是非常有用的,但Django通用视图最有用的地方是呈现数据库中的数据。 因为这个应用实在太普遍了,Django带有很多内建的通用视图来帮助你很容易 地生成对象的列表和明细视图。

让我们先看看其中的一个通用视图: 对象列表视图。 我们使用第五章中的 Publisher 来举例:

class Publisher(models.Model):
  name = models.CharField(max_length=30)
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=60)
  state_province = models.CharField(max_length=30)
  country = models.CharField(max_length=50)
  website = models.URLField()

  def __unicode__(self):
    return self.name

  class Meta:
    ordering = ['name']

要为所有的出版商创建一个列表页面,我们使用下面的URL配置:

from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher

publisher_info = {
  'queryset': Publisher.objects.all(),
}

urlpatterns = patterns('',
  (r'^publishers/$', list_detail.object_list, publisher_info)
)

这就是所要编写的所有Python代码。 当然,我们还需要编写一个模板。 我们可以通过在额外参数字典中包含一个template_name键来显式地告诉object_list视图使用哪个模板:

from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher

publisher_info = {
  'queryset': Publisher.objects.all(),
  **'template_name': 'publisher_list_page.html',**
}

urlpatterns = patterns('',
  (r'^publishers/$', list_detail.object_list, publisher_info)
)

在缺少template_name的情况下,object_list通用视图将自动使用一个对象名称。 在这个例子中,这个推导出的模板名称将是 "books/publisher_list.html" ,其中books部分是定义这个模型的app的名称, publisher部分是这个模型名称的小写。

这个模板将按照 context 中包含的变量 object_list 来渲染,这个变量包含所有的书籍对象。 一个非常简单的模板看起来象下面这样:

{% extends "base.html" %}

{% block content %}
  <h2>Publishers</h2>
  <ul>
    {% for publisher in object_list %}
      <li>{{ publisher.name }}</li>
    {% endfor %}
  </ul>
{% endblock %}

(注意,这里我们假定存在一个base.html模板。)

这就是所有要做的事。 要使用通用视图酷酷的特性只需要修改参数字典并传递给通用视图函数。 附录D是通用视图的完全参考资料;本章接下来的章节将讲到自定义和扩展通用视图的一些方法。

Python 相关文章推荐
Python 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
Python入门篇之函数
Oct 20 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
python代码如何实现余弦相似性计算
Feb 09 Python
Python基于locals返回作用域字典
Oct 17 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
在Python的Django框架中使用通用视图的方法
Jul 21 #Python
在Django的模型中执行原始SQL查询的方法
Jul 21 #Python
在Django的模型中添加自定义方法的示例
Jul 21 #Python
详解Python的Django框架中Manager方法的使用
Jul 21 #Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 #Python
通过数据库向Django模型添加字段的示例
Jul 21 #Python
Django的数据模型访问多对多键值的方法
Jul 21 #Python
You might like
PHP的可变变量名的使用方法分享
2012/02/05 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
详解Python3中的 input() 函数
2020/03/18 Python
自荐信格式
2013/12/01 职场文书
政工例会汇报材料
2014/08/26 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
房产遗嘱范本
2015/08/06 职场文书
2016年学校招生广告语
2016/01/28 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android