使用泛用型檢視來顯示資料

已完成

Django 中的泛用型檢視系統可簡化重複程式碼的建立。 您在資料驅動的應用程式中執行的一般作業會共用相同的模式。 例如,若要依識別碼或主索引鍵來顯示個別項目,工作流程一律為:

  1. 依識別碼從資料庫載入項目。
  2. 如果找不到項目,則傳回 404。
  3. 如果找到項目,請將項目傳遞至範本以供顯示。

泛用型檢視系統會確認這個事實,並提供可供您使用的類別,其中包含已撰寫的核心程式碼。 您繼承自適當的類別、設定幾個屬性,然後在您的 URLconf 中註冊適當的路徑。 系統會為您處理其餘部分!

Django 包含兩個用於顯示資料的泛用型檢視:DetailViewListView

項目詳細資料的 Detailview

泛用型檢視 DetailView 會用來顯示項目的詳細資料頁面。 DetailView 會擷取主索引鍵所指定 model 的項目,並將其傳遞至範本。 您可以將 template_name 設定為要使用的範本名稱。 預設值為 <model>_detail.html。 最後,我們可以將 context_object_name 設定為要在範本中使用的變數名稱。

若要使用狗的泛用型檢視來建立詳細資料檢視,您可以使用下列程式碼:

from . import models
from django.views import generic

class DogDetailView(generic.DetailView):
    model = models.Dog
    template_name = 'dog_detail.html'
    context_object_name = 'dog'

註冊 DogDetailView 類似於任何其他 path 項目。 確定您包含在內的重點是名為 pk 的參數。 Django 會使用此慣例來識別主索引鍵。 您也會注意到,我們會使用 as_view() 方法將類別轉換成檢視。

path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')

項目清單的 ListView

泛用型檢視 ListView 的運作方式類似於 DetailView。 您可以在檢視中設定 context_object_name 做為變數名稱,並設定 template_name 做為範本名稱。

主要差異在於 ListView 設計目的是要搭配任何傳回多個項目的查詢形式。 因此,您必須覆寫 get_queryset 函式。 泛用型檢視系統會呼叫 get_queryset 函式,以從資料庫中擷取項目,讓您可以視需要排序或篩選您的項目。

若要使用泛用型檢視 ListView 建立一個顯示所有收容中心清單的檢視,您可以使用下列程式碼:

from . import models
from django.views import generic

class ShelterListView(generic.ListView):
    template_name = 'shelter_list.html'
    context_object_name = 'shelters'

    def get_queryset(self):
        return models.Shelter.objects.all()

註冊檢視的執行方式與我們的 DetailView 方式大致相同。

path('', ShelterListView.as_view(), name='shelter_list')