Django笔记7(通用视图)

来源:互联网 发布:知乎一小时第三季mobi 编辑:程序博客网 时间:2024/06/05 11:00

1. 一个呈现静态“关于”页面的URLconf

from django.conf.urls.defaults import *from django.views.generic.simple import direct_to_templateurlpatterns = patterns('',    ('^about/$', direct_to_template, {        'template': 'about.html'    }))

注意:页面有中文,模板文件请使用UTF-8编码
2. 在我们自己的视图中重用它

from django.conf.urls.defaults importfrom django.views.generic.simple import direct_to_templatefrom mysite.views import *urlpatterns = patterns('',    ('^about/$', direct_to_template, {        'template': 'about.html'    }),    ('^about/(\w+)/$', about_pages),)
from django.http import Http404from django.template import TemplateDoesNotExistfrom django.views.generic.simple import direct_to_templatedef about_pages(request, page):    try:        return direct_to_template(request, template="about/%s.html" % page)    except TemplateDoesNotExist:        raise Http404()


3. 对象的通用视图

from django.views.generic import list_detailfrom mysite.books.models import *publisher_info = {    "queryset" : Publisher.objects.all(),    "template_object_name" : "publisher",    "template_name" : "books/publisher_list.html",    "extra_context" : {"book_list" : Book.objects.all()}}urlpatterns = patterns('',    (r'^publishers/$', list_detail.object_list, publisher_info))
{% extends "base.html" %}{% block content %}

Publishers

    {% for publisher in publisher_list %}
  • {{ publisher.name }} {% endfor %}
{% endblock %}

注意publisher_info各参数的默认值,template_object_name默认为object_list,template_name默认为books/publisher_list.html,注意结果的缓存问题
4. 显示某个出版商的所有书籍

urlpatterns = patterns('',    (r'^publishers/$', list_detail.object_list, publisher_info),    (r'^books/(\w+)/$', books_by_publisher),)
from django.views.generic import list_detailfrom mysite.books.models import *def books_by_publisher(request, name):    # Look up the publisher (and raise a 404 if it can't be found).    try:        publisher = Publisher.objects.get(name__iexact=name)    except Publisher.DoesNotExist:        raise Http404    # Use the object_list view for the heavy lifting.    return list_detail.object_list(        request,        queryset = Book.objects.filter(publisher=publisher),        template_name = "books/books_by_publisher.html",        template_object_name = "books",        extra_context = {"publisher" : publisher}    )
{% extends "base.html" %}{% block content %}

{{publisher.name}} Book List

    {% for book in books_list %}
  • {{ book.title }} {% endfor %}
{% endblock %}
原创粉丝点击