2016-09-21 71 views
1

編輯: 我知道我可以更改變量的名稱。我的問題是,我不想這樣做。我想知道django自動生成的所有變量。模板的Django上下文變量名稱


我做Django的入門教程,我在哪裏,在一個點上它解釋了generic views section

在本教程的前面部分,模板已提供 有包含問題的上下文和latest_question_list 上下文變量。對於DetailView,問題變量自動提供 - 由於我們使用的是Django模型(問題),Django的 能夠爲上下文變量確定合適的名稱。 但是,對於ListView,自動生成的上下文變量是 question_list。

我的問題是,我不知道Django如何確定這個「適當的名稱」。當我編寫自己的模板時,我想知道這一點。我想知道在這樣的模板中使用什麼上下文變量名稱。

根據我的理解,如果我的模型是Questionquestion上下文變量將存儲該問題,而question_list上下文變量將存儲每個問題。

所以我的疑問是:還有什麼其他的上下文變量名稱可以使用?他們會存儲什麼?我似乎無法在文檔中找到它,如果你知道它在哪裏,請將它重定向到它。

+0

僅供參考,您可以設置背景模板變量自己設置'context_object_name ='yourname'作爲視圖屬性。 – makaveli

+0

是的,我知道我可以自己設定這個名字。我的問題是,我不想設置這些名稱。我想知道django自動生成的變量是什麼 – Adocad

回答

1

您可以通過其他使用context_object_name這不是在的那部分解釋那麼好改變question_list的東西文檔,但是...

返回將用於包含此視圖操作數據的列表 的上下文變量名稱。如果object_list是Django對象的查詢集 ,並且未設置context_object_name,則上下文名稱 將作爲查詢集由 組成的模型的model_name,並附加後綴'_list'。例如,模型文章 將具有名爲article_list的上下文對象。

get_context_object_name方法給出

這是該方法的code的樣子,它應該清理所有的疑慮:

""" 
    Get the name of the item to be used in the context. 
    """ 
    if self.context_object_name: 
     return self.context_object_name 
    elif hasattr(object_list, 'model'): 
     return '%s_list' % object_list.model._meta.model_name 
    else: 
     return None 
+0

我認爲每個通用視圖都會生成多個上下文變量。該[代碼](https://github.com/django/django/blob/master/django/views/generic/list.py)幫助。謝謝 – Adocad

+0

很高興有幫助 – e4c5

1

我認爲這個默認的上下文變量名只適用於處理Django的基於類的視圖。

E.g.如果您使用DetailView作爲動物模型,Django會自動創建一個名爲'animal'的上下文變量供您在模板中使用。我認爲它也允許使用「對象」。

另一個例子,正如你所提到的,動物模型的ListView可以生成名爲animal_list的上下文名稱。

但是,在這兩種情況下,都有方法可以更改默認的上下文變量名稱。如果您在DetailView中指定了'context_object_name',這將是您在模板中引用的名稱。這也適用於ListViews。

本網站對所有的Django版本的CBVS所有信息:

https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/