Django 通用视图

Django 通用视图

在某些情况下,编写视图确实很繁重,就像我们之前所看到的。想象一下,你需要一个静态页面或者一个列表页面。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”模板发布一个静态页面。

我们的 static.html 文件内容如下 –

<html>
   <body> 
      This is a static page!!! 
   </body>
</html>

如果我们按照以前学的方式来做,我们必须改变 myapp/views.py 的内容。

from django.shortcuts import render

def static(request):
   return render(request, 'static.html', {})

myapp/urls.py

from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

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

from django.views.generic import TemplateView

class StaticView(TemplateView):
   template_name = "static.html"

并且在我们的myapp/urls.py中,将会是−

from myapp.views import StaticView
from django.conf.urls import patterns

urlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)

访问/myapp/static时会得到以下结果 –

Django 通用视图

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

  • 在views.py文件中不做任何更改
  • 将url.py文件更改为 −
from django.views.generic import TemplateView
from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views",
   url(r'^static/',TemplateView.as_view(template_name = 'static.html')),)

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

列出并显示数据库中的数据

我们将列出我们的Dreamreal模型中的所有条目。通过使用ListView通用视图类,这样做变得很容易。编辑url.py文件并将其更新为:

from django.views.generic import ListView
from django.conf.urls import patterns, url

urlpatterns = 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 ListView
from django.conf.urls import patterns, url

urlpatterns = 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:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}

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

Django 通用视图

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程