不同于傳統(tǒng)的視圖,一般的視圖是一個類但沒有函數(shù)。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 ?
<html>
<body>
This is a static page!!!
</body>
</html>
如果我們這樣做,按以前學(xué)過的方式,我們將不得不改變 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()),)
當(dāng)訪問 /myapp/static 將得到 ?
出于同樣的結(jié)果,我們也可以,執(zhí)行下列操作 ?
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')),)
我們要列出所有條目在Dreamreal模型。這樣使用ListView通用視圖類變得容易。編輯url.py文件,并對其進(jìn)行更新 -
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。如果你想自己的名字,將需要一個 context_object_name 參數(shù)添加到as_view方法。然后 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” ,)
然后關(guān)聯(lián)的模板將成為 ?
{% extends "main_template.html" %}
{% block content %}
Dreamreals:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}
訪問 /myapp/dreamreals/ 將產(chǎn)生如下頁面 ?