單一物件混入

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

提供一種機制,用於查找與目前 HTTP 請求關聯的物件。

方法和屬性

model

此視圖將顯示其資料的模型。指定 model = Foo 實際上與指定 queryset = Foo.objects.all() 相同,其中 objects 代表 Foo預設管理員

queryset

代表物件的 QuerySet。 如果提供,queryset 的值會取代為 model 提供的值。

警告

queryset 是一個具有可變值的類別屬性,因此直接使用時必須小心。在使用它之前,請呼叫其 all() 方法,或使用 get_queryset() 擷取它,此方法會處理幕後的複製。

slug_field

模型上包含 slug 的欄位名稱。預設情況下,slug_field'slug'

slug_url_kwarg

包含 slug 的 URLConf 關鍵字引數名稱。預設情況下,slug_url_kwarg'slug'

pk_url_kwarg

包含主鍵的 URLConf 關鍵字引數名稱。預設情況下,pk_url_kwarg'pk'

context_object_name

指定要在內容中使用的變數名稱。

query_pk_and_slug

如果為 True,則會使 get_object() 使用主鍵和 slug 執行其查詢。預設值為 False

此屬性有助於緩解不安全的直接物件參照攻擊。當應用程式允許透過循序主鍵存取個別物件時,攻擊者可能會暴力猜測所有 URL;從而取得應用程式中所有物件的清單。如果應防止可以存取個別物件的使用者取得此清單,將 query_pk_and_slug 設定為 True 將有助於防止猜測 URL,因為每個 URL 都需要兩個正確的非循序引數。使用唯一的 slug 可以達到相同的目的,但此方案允許您使用非唯一的 slug。

get_object(queryset=None)

傳回此視圖將顯示的單一物件。 如果提供 queryset,則該查詢集將用作物件的來源;否則,將使用 get_queryset()get_object() 會在視圖的引數中尋找 pk_url_kwarg 引數;如果找到此引數,此方法會使用該值執行基於主鍵的查詢。如果找不到此引數,它會尋找 slug_url_kwarg 引數,並使用 slug_field 執行 slug 查詢。

query_pk_and_slugTrue 時,get_object() 會使用主鍵和 slug 執行其查詢。

get_queryset()

傳回將用於擷取此視圖將顯示的物件的查詢集。預設情況下,get_queryset() 會傳回 queryset 屬性的值(如果已設定),否則會透過在 model 屬性的預設管理員上呼叫 all() 方法來建構 QuerySet

get_context_object_name(obj)

傳回將用於包含此視圖所操作資料的內容變數名稱。如果未設定 context_object_name,則內容名稱會從組成查詢集的模型的 model_name 建構。例如,模型 Article 的內容物件會命名為 'article'

get_context_data(**kwargs)

傳回用於顯示物件的內容資料。

此方法的基本實作要求視圖設定 self.object 屬性(即使是 None)。如果您在使用此混入時未使用這樣做的內建視圖之一,請務必執行此操作。

它會傳回包含以下內容的字典

  • object:此視圖正在顯示的物件 (self.object)。

  • context_object_nameself.object 也會以 get_context_object_name() 所回傳的名稱儲存,預設為模型名稱的小寫版本。

Context 變數會覆寫樣板 context processors 的值

來自 get_context_data() 的任何變數會優先於來自 context processors 的 context 變數。例如,如果您的視圖將 model 屬性設定為 User,則預設的 context 物件名稱 user 會覆寫來自 django.contrib.auth.context_processors.auth() context processor 的 user 變數。使用 get_context_object_name() 來避免衝突。

get_slug_field()

傳回要用於依 slug 查找的 slug 欄位名稱。預設情況下,這會傳回 slug_field 的值。

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

一個混入類別,為操作單一物件實例的視圖執行基於樣板的回應呈現。要求混入的視圖提供 self.object,即視圖正在操作的物件實例。self.object 通常是,但並非必須是 Django 模型的實例。如果視圖正在建構新的實例,則它可能是 None

繼承

方法和屬性

template_name_field

目前物件實例上可用於判斷候選樣板名稱的欄位。如果 template_name_field 本身或目前物件實例上 template_name_field 的值為 None,則不會將該物件用於候選樣板名稱。

template_name_suffix

附加到自動產生的候選樣板名稱的後綴。預設後綴為 _detail

get_template_names()

傳回候選樣板名稱的清單。傳回以下清單

  • 視圖上 template_name 的值(如果提供)

  • 視圖正在操作的物件實例上 template_name_field 欄位的內容(如果可用)

  • <app_label>/<model_name><template_name_suffix>.html

回到頂端