全部博文(2065)
分类: Python/Ruby
2009-08-04 17:39:29
Django内建通用视图可以实现如下功能:
完成常用的简单任务:重定向到另一个页面以及渲染一个指定的模板。
显示列表和某个特定对象的详细内容页面。第8章中提到的 event_list 和 entry_list 视图就是列表视图的一个例子。一个单一的 event 页面就是我们所说的详细内容页面。
呈现基于日期的数据的年/月/日归档页面,关联的详情页面,最新页面。Django Weblogs (http://www.djangoproject.com/weblog/)的年、月、日的归档就是使用通用视图 架构的,就像是典型的新闻报纸归档。
允许用户在授权或者未经授权的情况下创建、修改和删除对象。
综上所述,这些视图为开发者日常开发中常见的任务提供了易用的接口。
我的心得:通用视图是为了减少重复代码的编写工作量而做的!
我们要做的就是要知道这个通用视图方法的参数是哪些。我们要传过去给它!
urlpatterns = patterns('',
(r'^about/$',direct_to_template,{'template':'newtest/about.html'}),
)
direct_to_template这个通用视图。参数是template值。这里面我不用再自己写视图方法了实现的功能是跟这个一样的。这样就可以减少很多的代码编写量了!
通用视图的常见参数:将参数记住那使用起来会比较方便的!
参数 | 描述 |
---|---|
allow_empty | A Boolean specifying whether to display the page if no objects are available. If this is False and no objects are available, the view will raise a 404 error instead of displaying an empty page. By default, this is False . |
context_processors | A list of additional template-context processors (besides the defaults) to apply to the views template. See Chapter 10 for information on template context processors. |
extra_context | A dictionary of values to add to the template context. By default, this is an empty dictionary. If a value in the dictionary is callable, the generic view will call it just before rendering the template. |
mimetype | The MIME type to use for the resulting document. It defaults to the value of the DEFAULT_MIME_TYPE setting, which is text/html if you havent changed it. |
queryset | A QuerySet (i.e., something like Author.objects.all() ) to read objects from. See Appendix C for more information about QuerySet objects. Most generic views require this argument. |
template_loader | The template loader to use when loading the template. By default, its django.template.loader . See Chapter 10 for information on template loaders. |
template_name | The full name of a template to use in rendering the page. This lets you override the default template name derived from the QuerySet . |
template_object_name | The name of the template variable to use in the template context. By default, this is 'object' . Views that list more than one object (i.e., object_list views and various objects-for-date views) will append '_list' to the value of this parameter. |
(只是简单的渲染下常用的公共模板或发出一个重定向操作就行了!并不处理一些常用视图逻辑!)
视图函数 : django.views.generic.simple.direct_to_template
该视图渲染一给定模板,给其传递一个 {{ params }} 的模板变量,该变量是在URL中被获取的一个自典型参数
示例:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
(r'^foo/$', direct_to_template, {'template': 'foo_index.html'}),
(r'^foo/(?P\d+)/$', direct_to_template, {'template': 'foo_detail.html'}),
)
请求 /foo/ 时就会渲染模板 foo_index.html ,而请求 /foo/15/ 就会附带一个值为 15 的context来渲染模板 foo_detail.html 。
必要参数
template :模板的全名。
视图函数 : django.views.generic.simple.redirect_to
这个视图将源URL重定向到目的URL,目的URL中可以带有字典风格的格式化字符串,在源URL中被捕获的参数可以被格式化输出到目的URL中。
如果目的URL是 None ,Django会返回HTTP 410(文件丢失)错误。
url :被重定向到的URL,它是个字符串。如果是 None 的话,就返回410(文件丢失)错误。
视图函数 : django.views.generic.list_detail.object_list
使用这个视图来显示一个对象列表页面。
from mysite.books.models
import Author
from django.conf.urls.defaults
import *
from django.views.generic
import list_detail
author_list_info = {
'queryset' : Author.objects.all(),
'allow_empty': True,
}
urlpatterns = patterns('',
(r'authors/$',
list_detail.object_list, author_list_info)
)
这个通用视图的参数是author_list_info
是一个字典类型的数据值!
queryset : 要列出的对象的 QuerySet (参见表 D-1).(显示出来的结果集)
paginate_by : 一个整形数,用来制定每页显示多少条记录。如果指定了这个参数,那么视图将会把记录按照paginate_by的值来安排每页记录的数量。视图将会通过一个page的查询字符串参数传入一个以0开始的页号(通过GET来获取page的值),或者在配置url的时候指定一个page变量。详细请查看Pagination章节的说明。(分页的参数值)
Additionally, this view may take any of these common arguments described in Table D-1:
allow_empty
context_processors
extra_context
mimetype
template_loader
template_name
template_object_name
If template_name isnt specified, this view will use the
template
如果上面的可选参数中的模板名称没有指定的话就使用默认的!
当然我们可以指定哦!
If the results are paginated, the context will contain these extra variables:(如果有分页存在的话就要考虑如下的可选参数)
results_per_page : The number of objects per page. (This is the same as the paginate_by parameter.)(每页显示条数)
has_next : 一个布尔值表示是否有下一页.
has_previous : 一个布尔值表示是否有上一页.
page : 表示当前页的页码,是一个整数(如第9页),第一页是从1开始计算的。
next : The next page number, as an integer. If theres no next page, this will still be an integer representing the theoretical next-page number. This is 1-based.
previous : The previous page number, as an integer. This is 1-based.
pages : The total number of pages, as an integer.
hits : The total number of objects across all pages, not just this page.
(r'^objects/page(?P[0-9]+)/$', 'object_list', dict(info_dict))
Pass the page number via the page query-string parameter. For example, a URL would look like this:
/objects/?page=3
其分页的方法就这么简单的!
View function : django.views.generic.list_detail.object_detail
详细的信息页面。不是列表页面了哦!区别开来的!
from mysite.books.models import Author
from django.conf.urls.defaults import *
from django.views.generic import list_detail
author_list_info = {
'queryset' : Author.objects.all(),
'allow_empty': True,
}
**author_detail_info = {**
**"queryset" : Author.objects.all(),**
**"template_object_name" : "author",**
**}**
urlpatterns = patterns('',
(r'authors/$', list_detail.object_list, author_list_info),
**(r'^authors/(?P
就是说:当选择了某一个内容标题之后就会进入到详细的说明信息页面出来!
queryset : A QuerySet that will be searched for the object (see Table D-1).
and either (必选参数值)
object_id : The value of the primary-key field for the object.
或者
slug : The slug of the given object. If you pass this field, then the slug_field argument (see the following section) is also required.
This view may also take these common arguments (see Table D-1):
可选参数:
context_processors
extra_context
mimetype
template_loader
template_name
template_object_name
If template_name and template_name_field arent specified, this view will use
the template
post_save_redirect : A URL to which the view will redirect after saving the object. By default, its object.get_absolute_url() .
《在保存之后会跳转到哪个URL地址去!》
post_save_redirect : May contain dictionary string formatting, which will be interpolated against the objects field attributes. For example, you could use post_save_redirect="/polls/%(slug)s/" .
login_required : A Boolean that designates whether a user must be logged in, in order to see the page and save changes. This hooks into the Django authentication system. By default, this is False .
If this is True , and a non-logged-in user attempts to visit this page or save the form, Django will redirect the request to /accounts/login/ .
This view may also take these common arguments (see Table D-1):
context_processors
extra_context
template_loader
template_name
View function : django.views.generic.create_update.update_object