[英]Diference between get_context_data and queryset in Django generic views?
Django通用視圖中get_context_data
和queryset
之間有什么區別? 他們似乎做同樣的事情?
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查詢集
ListView
的get_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.