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 相关文章推荐
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
Django Highcharts制作图表
Aug 27 Python
Python守护线程用法实例
Jun 23 Python
VSCode下好用的Python插件及配置
Apr 06 Python
对Python 内建函数和保留字详解
Oct 15 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Python中一些深不见底的“坑”
Jun 12 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
python 日志 logging模块详细解析
Mar 31 Python
Python之字典对象的几种创建方法
Sep 30 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
基于php判断客户端类型
2016/10/14 PHP
Js 中debug方式
2010/02/07 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
angular.element方法汇总
2015/01/07 Javascript
angular.bind使用心得
2015/10/26 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python的pip安装以及使用教程
2018/09/18 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python-numpy-指数分布实例详解
2019/12/07 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
STP的判定过程
2012/10/01 面试题
学生会干部自荐信
2014/02/04 职场文书
电子银行营销方案
2014/02/22 职场文书
安全生产活动月方案
2014/03/09 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书