2015-06-24 61 views
1

在我的項目中,我想在側邊菜單和內容頁面之間拆分頁面。 我想展示一個用戶類型不同的sidemenu(有5個用戶類型,所以會有5個sidemenus)。但有時候,要顯示的內容頁面可以與這5種用戶類型相同。Django:1爲不同的用戶查看?

我正在尋找一個「模式」來處理這個問題,我想到了一個,但從未在另一個項目中看到過它。我希望你能告訴我,如果這是一個好或壞的做法:

  • 1 URI所有用戶類型
  • 在views.py,1個查看所有用戶類型(如/ MYAPP/display_home。) 。在視圖中,我嘗試瞭解用戶是否已登錄,然後知道我們正在處理哪種類型的用戶。然後,重定向到HTML,在上下文中傳遞一個包含用戶類型的變量。
  • 最後,在模板中,這樣的事情:

模板的例子:

{% if user_type == "anonymous" %} 
    <!-- display anonymous sidemenu here --> 
{% elif user_type == "landlord" %} 
    <!-- display landlord sidemenu here --> 
{% endif %} 

<-- Here is the same content for all user types --> 

你有什麼建議嗎?另一種模式提出?

+0

這可能取決於確切的區別。如果差異僅在模板中,則將其修復在模板中,或爲每個用戶提供不同的模板。如果有更多的差異,請儘早做。 – RemcoGerlich

+0

@RemcoGerlich它只在模板中。我想這種模式應該沒問題。 –

回答

1

檢查this answer討論user.is_authenticated。您也可以在視圖中查看以查看用戶是誰(see here)並相應地修改發送到模板的上下文。另一個選擇是修改你的視圖,以簡單地顯示不同類型的用戶不同的模板。

很多方法來完成這一點,不知道是否有一個「正確的」。


你的評論讓我意識到,這正是auth包的Groups特徵是。您可以將用戶分配到組,查詢他們是否是該組的成員,然後根據該組來顯示內容。我很抱歉,我沒有時間寫出示例代碼,但有tons of stuff here on SO about it;希望這對你來說是一個很好的起點。

+0

謝謝。在我的情況下,知道用戶是否認證是不夠的,我需要知道用戶類型(將鏈接到我的數據庫中的用戶)。我想避免製作太多模板,因爲內容完全相同,只是旁邊的菜單有所不同。 –

+0

@DavidD。 - 根據您的回覆添加了一些內容。希望有所幫助! – eykanal

1

我不知道它是不錯的風格。但是你可以在你的模板中使用

{% include user_type_sidemenu_template with arg1=... %} 

併爲sidemenu每個user_type提供不同的模板。然後,您可以將模板變量user_type_sidemenu_template設置爲您視圖中相應的模板名稱。

+0

非常感謝您提高模板中的語法。 –

+0

實際上,由於arg1已經被設置在視圖中,因此不需要添加'with arg1 = ...' –