Django 泛型視圖

在某些情況下編寫視圖代碼,正如我們所看到前面工作真的很繁重。想象一下,只需要一個靜態(tài)頁面或列表頁。 Django還提供了一種簡單的方法來設(shè)置這些簡單的視圖被稱為泛型視圖。

不同于傳統(tǒng)的視圖,一般的視圖是一個類但沒有函數(shù)。Django還提供了一組類 django.views.generic 泛型視圖,以及每一個普通視圖是這些類或從它們中的一個類繼承的。

有10+泛型類?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
>>> 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']

你可以使用泛型視圖。讓我們來看一些實例來看看它是如何工作的。

靜態(tài)網(wǎng)頁

讓我們從“static.html”模板發(fā)布靜態(tài)頁面。

我們的 static.html ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
<html>
    <body> 
       This is a static page!!! 
    </body>
 </html>

如果我們這樣做,按以前學(xué)過的方式,我們將不得不改變 myapp/views.py ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
from django.shortcuts import render
 def static(request):
    return render(request, 'static.html', {})

myapp/urls.py 如下 ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

最好的辦法就是使用泛型視圖。對于這一點,我們的 myapp/views.py 將變成為 ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
from django.views.generic import TemplateView
 class StaticView(TemplateView):
    template_name = "static.html"

而我們的 myapp/urls.py 將如下 ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
from myapp.views import StaticView
 from django.conf.urls import patterns
 urlpatterns = patterns("myapp.views", (r'^static/, StaticView.as_view()),)  , StaticView.as_view()),)

當(dāng)訪問 /myapp/static 將得到 ? 瀏覽器運行結(jié)果

出于同樣的結(jié)果,我們也可以,執(zhí)行下列操作 ?

不需要修改 views.py        更改url.py文件為 -    

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
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文件中的第二個方法。

從數(shù)據(jù)庫列表和顯示數(shù)據(jù)

我們要列出所有條目在Dreamreal模型。這樣使用ListView泛型視圖類變得容易。編輯url.py文件,并對其進(jìn)行更新 -

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
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 成為 -

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
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)的模板將成為 ?

# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.soo66.com
# Date : 2020-08-08
{% extends "main_template.html" %}
 {% block content %}
 Dreamreals:<p>
 {% for dr in object_list %}
 {{dr.name}}</p>
 {% endfor %}
 {% endblock %}

訪問 /myapp/dreamreals/ 將產(chǎn)生如下頁面 ? 瀏覽器運行結(jié)果

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清