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+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
python操作列表的函数使用代码详解
Dec 28 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python实现梯度下降法
Mar 24 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
python使用建议技巧分享(三)
Aug 18 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
python 利用zmail库发送邮件
Sep 11 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
python中validators库的使用方法详解
Sep 23 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
获得Google PR值的PHP代码
2007/01/28 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
js实现购物车功能
2018/06/12 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
别名指示符是什么
2012/10/08 面试题
2013年学期结束动员演讲稿
2014/01/07 职场文书
大气污染防治方案
2014/05/19 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js