簡體   English   中英

Django通用視圖中get_context_data和queryset之間的差異?

[英]Diference between get_context_data and queryset in Django generic views?

Django通用視圖中get_context_dataqueryset之間有什么區別? 他們似乎做同樣的事情?

get_context_data()

此方法用於填充字典以用作模板上下文。 例如,ListViews將get_queryset()的結果填充為object_list。 您可能最常重復使用此方法來添加要在模板中顯示的內容。

def get_context_data(self, **kwargs):
    data = super().get_context_data(**kwargs)
    data['some_thing'] = 'some_other_thing'
    return data

然后在您的模板中,您可以引用這些變量。

<h1>{{ some_thing }}</h1>

<ul>
{% for item in object_list %}
    <li>{{ item.name }}</li>
{% endfor %}    
</ul>

此方法僅用於為模板提供上下文。

get_queryset()

ListViews - 它確定要顯示的對象列表。 默認情況下,它只會為您指定的模型提供所有內容。 通過重寫此方法,您可以擴展或完全替換此邏輯。 關於這個主題的Django文檔

這些是完全不同的東西。

get_context_data()用於生成可在模板中訪問的變量的dict。 queryset是由模型實例組成的Django ORM查詢集

ListViewget_context_data()默認實現將get_context_data()返回值get_queryset()默認情況下只返回self.queryset )添加到context作為objects_list變量的上下文中。

為什么不看看代碼。

http://ccbv.co.uk/projects/Django/1.11/django.views.generic.list/ListView/

單擊get()方法顯示它調用get_queryset()方法來獲取查詢集 - 通常在ListView中迭代。

進一步向下調用get context_data(),其中可以將額外的變量傳遞給模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM