[英]User permissions for Django module
我的Django模板中的權限有一個小問題。
我正在嘗試根據權限在菜單欄中為我的項目顯示一個圖標。 我想擁有它,以便如果用戶有權向項目添加新的后續操作,他們可以看到圖標,如果他們沒有該權限,則不顯示該鏈接。
我的權限語法是follow.add_followup
,我從打印user.get_all_permissions()
。
我在我的模板中嘗試了這段代碼:
...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...
但是當我顯示模板時,我遇到了這個錯誤:
/ project / 232 / view /中的TemplateSyntaxError
無法解析剩余部分:來自'user.has_perm(followup.add_followup)'的'(followup.add_followup)'
有什么想法嗎? 這讓我很頭疼! :)
由於您使用的是Django權限系統,因此最好使用以下模板語法...
{%if perms.followup.add_followup%}your URL here{%endif%}
編輯:Django自動為每個模型創建3個權限,'添加','更改'和'刪除'。 如果沒有用於添加鏈接的模型,則必須在模型類Meta中添加相關模型的權限...同樣:
somemodels.py
class SomeModel(Model):
...
class Meta:
permissions = (('add_followup','Can see add urls'),(...))
在Django auth用戶管理頁面中,您可以看到您的權限。 在模板層中,權限以基本的Django樣式呈現,
<app_label>.<codename>
在這種情況下,它將像:
{%if perms.somemodels.add_followup%}your URL here{%endif%}
如果沒有與您希望的工作相關的模型,則將權限添加到模型中...
在您的模板中,您可以編寫
{{perms.somemodels}}
密封該用戶的可用權限,其中somemodel
是您將其權限添加到其某個模型的應用程序的名稱。
這是我非常簡單的解決方案,在你的模板中添加:
例如:
.......
{% if 'user.can_drink' in user.get_all_permissions %}
{{ user }} can drink.
.......
{% else %}
{{ user }} can´t drink.
........
{% endif %}
.......
Django文檔詳細說明了答案#2: https : //docs.djangoproject.com/en/dev/topics/auth/#id9
當前登錄用戶的權限存儲在模板變量{{perms}}中。 這是django.contrib.auth.context_processors.PermWrapper的一個實例,它是一個模板友好的權限代理。
我在我的模板中嘗試了這段代碼:
這種復雜的決策是在視圖功能中進行的。
或者它進入上下文,然后呈現給模板。
https://stackoverflow.com/search?q=%5Bdjango%5D+context
在您的視圖中執行此操作
def my_view( request ):
followup= user.has_perm('followup.add_followup')
# etc.
return render_to_response( template, {'followup':followup,... )
然后你的模板很簡單
{% if followup %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.