單一物件混入¶
SingleObjectMixin
¶
- class django.views.generic.detail.SingleObjectMixin¶
提供一種機制,用於查找與目前 HTTP 請求關聯的物件。
方法和屬性
- 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_slug
為True
時,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_name
:self.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