我有兩種類型的用戶。用戶登錄後,我將用戶帶到他/她的用戶個人資料根據用戶類型顯示不同的配置文件
根據用戶類型,他們的個人資料可能包含不同的導航項目和表單。有沒有更簡單的方法來構建基於用戶類型的導航,而不是將模板中的{%if%}標籤放在任何位置。
我有兩種類型的用戶。用戶登錄後,我將用戶帶到他/她的用戶個人資料根據用戶類型顯示不同的配置文件
根據用戶類型,他們的個人資料可能包含不同的導航項目和表單。有沒有更簡單的方法來構建基於用戶類型的導航,而不是將模板中的{%if%}標籤放在任何位置。
不知道爲什麼@ dm03514刪除了他的答案,但我會發布類似的東西,因爲這也是我的想法。
如果模板足夠不同,那麼你是對的,分支到處都是一個壞主意。它只會讓你的模板變得混亂。所以只需爲每個用戶類型創建一個單獨的模板。然後,在您看來,您可以選擇一個或另一個模板來根據用戶類型進行顯示。例如:
舊式的基於函數的觀點:
def profile_view(request):
if request.user.get_profile().type == 'foo':
template = 'path/to/foo_profile.html'
elif request.user.get_profile().type == 'bar':
template = 'path/to/bar_profile.html'
else:
template = 'path/to/generic_profile.html' # if you want a default
return render_to_response(template, {'data': 'data'}, context_instance=RequestContext(request))
新式基於類的觀點:
class MyView(View):
def get_template_names(self):
if self.request.user.get_profile().type == 'foo':
return ['path/to/foo_profile.html']
elif self.request.user.get_profile().type == 'bar':
return ['path/to/bar_profile.html']
else:
return ['path/to/generic_profile.html']
我不知道如何您的用戶類型但如果它基於字符串值,則甚至可以創建更加自動化的內容,例如:
template = 'path/to/%s_profile.html' % request.user.get_profile().type
然後,只需根據該命名方案爲每種類型創建一個模板。
而且,當然,每個模板都可以擴展基本profile.html模板,從而可以將一些常用功能分解出來。
創建一個配置文件模型並將用戶鏈接到此配置文件模型。 (通過外鍵)
配置文件模型將爲不同的行爲具有不同的屬性。
這些不同的行爲將通過分支模板(如您在模板中使用的話所示)或將不同的數據返回到模板或發送到字體端的javascript函數以修改行爲
另一種選擇是將用戶引導到基於配置文件的不同頁面。這個挑戰是不同的用戶需要不同的URL。這可能會導致大量的代碼重複。
你有沒有想過使用權限? 我的自定義權限也一樣。容易的部分是認證提供你需要的任何東西,並且它始終在請求中。
非常類似的代碼是什麼克里斯·帕拉特提出將用於:
def profile_view(request):
if request.user.has_perm('permission_codename_foo'):
template = 'path/to/foo_profile.html'
elif request.user.has_perm('permission_codename_bar'):
template = 'path/to/bar_profile.html'
else:
template = 'path/to/generic_profile.html' # if you want a default
return render_to_response(template, {'data': 'data'}, context_instance=RequestContext(request))
什麼是有用的,是你可以使用相同的權限與裝飾保護您的觀點:
@permission_required('permission_codename_foo')
def foo():
#your view here
,或者如果你想檢查權限備選方案:
#user_passes_test(lambda u: u.has_perm('permission_codename_foo') or u.has_perm('permission_codename_bar'))
def foo_or_bar():
#your view here
django創建整個一堆默認權限以及命名爲:app_name.add_modelname,app_name.change_modelname和app_name.delete_modelname如果你需要的,如果您需要更改的模板部分,嘗試{%包含%}加載不同的部分來限制用戶的可能性
文件。
你可以建立個人資料一頁和模塊化的部件,包含/排除他們基於使用'用戶類型{%如果admin_type%}包括「admin_menu.htm」 {%ENDIF%}'。 admin_menu.htm可以是一個簡單的'
'完整的管理員菜單選項。 – Furbeenator 2012-02-23 21:31:50