正常情況下,已登錄用戶權(quán)限保存在模板{{perms}}變量中到腥,是權(quán)限模板代理的django.contrib.auth.context_processors.PermWrapper的一個實例纵朋,具體可以查看django/contrib/auth/context_processors.py源碼拧廊。
舉例:
{% if perms %}
Welcome
{% else %}
You do not have permission to do anything here!
{% endif %}
發(fā)現(xiàn){{perms}}變量壓根就不存在托修。
經(jīng)測試發(fā)現(xiàn)挺勿,使用 return render(request, 'fms/fms_add.html', locals()) 可以獲得權(quán)限信息
return render_to_response( 'fms/fms.html', locals()) 則不能獲得權(quán)限信息。
render VS render_to_response
render是比render_to_response更便捷渲染模板的方法玄捕,會自動使用RequestContext, 而后者需要手動添加,才能獲取權(quán)限信息踩蔚。
即 return render_to_response( 'fms/fms.html', locals(), context_instance=RequestContext(request))
其中 RequestContext是django.template.Context的子類,接受 request 和 context_response, 從而將上下文填充渲染到模板問題已經(jīng)很明確桩盲,由于使用了render_to_response方法寂纪。沒有手動添加context_instance=RequestContext(request) 導(dǎo)致模板不能使用{{perms}}變量。
綜上所述:獲取perms變量的兩種方法
1:return render(request, 'fms/fms_add.html', locals())
2:return render_to_response( 'fms/fms.html', locals(), context_instance=RequestContext(request))