开发手册 欢迎您!
软件开发者资料库

Django - 通用视图

Django通用视图 - 从基础知识,概述,环境,创建项目,应用程序生命周期,管理界面,创建视图,URL映射,模板系统,模型,页面重定向,发送电子邮件,通用视图,表单处理,文件上传,Apache设置,Cookie处理,会话,缓存,评论,RSS,AJAX。

在某些情况下,正如我们之前看到的那样,撰写视图非常重要.想象一下,您需要一个静态页面或列表页面. Django提供了一种简单的方法来设置那些称为通用视图的简单视图.

与经典视图不同,泛型视图是类而不是函数. Django在django.views.generic中为泛型视图提供了一组类,每个泛型视图都是其中一个类或从其中一个继承的类.

有10个以上;泛型类 :

>>> import django.views.generic>>> dir(django.views.generic)['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView',    'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView',    'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView',    'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__',    '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates',    'detail', 'edit', 'list']

这可以用于您的通用视图.让我们看一些示例来看看它是如何工作的.

静态页面

让我们从"static.html"模板发布一个静态页面./p>

我们的static.html :

          This is a static page!!!    

如果我们按照以前的方式做到这一点,我们就必须将 myapp/views.py 更改为 :

from django.shortcuts import renderdef static(request):   return render(request, 'static.html', {})

myapp/urls.py 为 :

from django.conf.urls import patterns, urlurlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

最好的方法是使用通用视图.为此,我们的myapp/views.py将变为 :

from django.views.generic import TemplateViewclass StaticView(TemplateView):   template_name = "static.html"

我们的myapp/urls.py将为 : 去;

from myapp.views import StaticViewfrom django.conf.urls import patternsurlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)

访问/myapp/static时,你得到 : 去;

静态页面

对于相同的结果我们也可以,执行以下操作 :

  • views.py中没有变化

  • 将url.py文件更改为be :

from django.views.generic import TemplateViewfrom django.conf.urls import patterns, urlurlpatterns = patterns("myapp.views",   url(r'^static/',TemplateView.as_view(template_name = 'static.html')),)

如您所见,您只需要在第二种方法中更改url.py文件.

列出和显示来自的数据DB

我们将列出Dreamreal模型中的所有条目.通过使用ListView通用视图类,可以轻松完成此操作.编辑url.py文件并将其更新为 :

from django.views.generic import ListViewfrom django.conf.urls import patterns, urlurlpatterns = patterns(   "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal,       template_name = "dreamreal_list.html")),)

此时需要注意的是,通用视图传递给模板的变量是object_list中.如果要自己命名,则需要在as_view方法中添加context_object_name参数.然后url.py将变为 :

from django.views.generic import ListViewfrom django.conf.urls import patterns, urlurlpatterns = patterns("myapp.views",   url(r'^dreamreals/', ListView.as_view(      template_name = "dreamreal_list.html")),      model = Dreamreal, context_object_name = "dreamreals_objects" ,)

相关模板将为 :

{% extends "main_template.html" %}{% block content %}Dreamreals:

{% for dr in object_list %}{{dr.name}}

{% endfor %}{% endblock %}

访问/myapp/dreamreals/将生成以下页面 :

从DB列出和显示数据