使用泛用型檢視來顯示資料
Django 中的泛用型檢視系統可簡化重複程式碼的建立。 您在資料驅動的應用程式中執行的一般作業會共用相同的模式。 例如,若要依識別碼或主索引鍵來顯示個別項目,工作流程一律為:
- 依識別碼從資料庫載入項目。
- 如果找不到項目,則傳回 404。
- 如果找到項目,請將項目傳遞至範本以供顯示。
泛用型檢視系統會確認這個事實,並提供可供您使用的類別,其中包含已撰寫的核心程式碼。 您繼承自適當的類別、設定幾個屬性,然後在您的 URLconf 中註冊適當的路徑。 系統會為您處理其餘部分!
Django 包含兩個用於顯示資料的泛用型檢視:DetailView
和 ListView
。
項目詳細資料的 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')