2016-01-26 79 views
1

我正在研究一個有幾個模型的Django應用程序:父母,孩子,學校,手機。每個「父母」(實質上是Django的「用戶」模式)可以有多個孩子,每個孩子可以有一個學校和一個手機。Django從基於URL的模型列表中獲取當前選定的模型

我組織了我的網站,以保持它儘可能模塊化。通過這個,我的意思是導航模板位於一個文件中,一個側邊欄模板(包含很多鏈接)位於另一個文件中,全部由一個layout.html文件組合在一起。

如果父母訪問該網站,它將被重定向到domain.com/dashboard。在導航欄中,父母可以選擇從下拉菜單中選擇一個孩子。之後,父/用戶將被重定向到domain.com/dashboard/1,其中「1」是子數據庫表的主鍵。

我的問題:

  1. 如何獲得所選擇的值的頁面導航後/儀表板/ 1,這樣我就可以改變下拉值當前選擇的孩子?
  2. 我如何在整個layout.html文件中從本質上獲取有關當前所選小孩的信息?例如,側邊欄鏈接需要採用domain.com/schools/1,domain.com/cellphones/1的形式,其中此「1」始終是「子」表的主鍵。另外,這個「sidebar.html」模板本身也是存在的,並且只包含在layout.html模板中。目前,我正確鏈接到/dashboard/1,只是因爲我使用用戶的ID遍歷Children數據庫中的所有模型。

我已經設法獲得所有模板文件(包括sidebar.html)中的所有孩子的列表,但我努力根據URL /用戶的選擇獲取單個模型。

回答

0

如何獲得所選擇的值的頁面導航到 /dashboard/1後,這樣我就可以在下拉值更改爲 當前選擇的孩子?

下面是做到這一點的一種方式,但實際上你需要使用一個自定義的模板標籤來顯示您的下拉列表:

<select> 
    {% for st in studentlist %} 
     <option value="{{ st.pk }}" 
     {% if request.url.path|slice:":-1" == st.pk %}selected{% endif %}>{{ st }}</option> 
    {% endfor %} 
</select> 

如何基本上可以獲取有關當前選定 兒童信息跨整個layout.html文件?

你需要從視圖模板通過這一點,因爲上下文變量:當你想指由父,使用選擇的孩子在你的模板

def get_child_dashboard(request, pk=None): 
    child = get_object_or_404(Child, pk=pk) 
    return render(request, 'dashboard.html', {'child': child}) 

現在,無處不在例如:{{ child }},例如:

<p>Hello, you are viewing the dashboard for {{ child.first_name }}</p> 
+0

感謝您的支持。我的問題是,這個sidebar.html模板(需要與其中的child_id鏈接)不在dashboard.html模板中。 「dashboard.html」模板僅着重於實際內容區域。這個想法是,當用戶打開儀表板時,側邊欄會更新鏈接。說到這一點,我可以從另一個視圖調用一個視圖,並告訴它在第一個視圖被渲染後渲染? –

+0

模板不是視圖;您需要通過覆蓋「dashboard.html」中的其他模板塊(來自'sidebar.html')來重寫它,以使其具有上下文 - 或使用模板標籤來接收對象並從側邊欄呈現內容。 html' - 例如'{%display_sidebar child%}' –

+0

再次感謝。我不可能把'sidebar.html'放在'dashboard.html'裏面 - 還有很多其他的頁面,比如'dashboard.html',我不想在每個地方包含'sidebar.html'。我一直在努力理解這些自定義包含標籤。同樣,當模板完全獨立時,如何跨所有這些不同的頁面獲取單個子模型實例?唯一相同的是URL。 –