3

我的權限在我的Django模板中遇到了一個小問題。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 %} 
... 

但是,當我顯示模板,我跟此錯誤:

TemplateSyntaxError at /project/232/view/

Could not parse the remainder: '(followup.add_followup)' from 'user.has_perm(followup.add_followup)'

有什麼想法?這一直讓我頭疼! :)

回答

1

I have tried this code in my template:

這種複雜的決策進入視圖功能。

或者它進入上下文,然後呈現給模板。

https://stackoverflow.com/search?q=%5Bdjango%5D+context

When to use context processor

在你看來做這個

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 %} 
+0

我的原因嘗試它在模板中,是因爲我不想顯示登錄用戶的圖標,無法使用。 – TheLifeOfSteve 2011-02-03 16:31:02

+1

您可以在視圖函數中創建布爾值,並在模板中使用簡單的{%if%}來顯示或不顯示。 – 2011-02-03 16:34:55

+0

謝謝,兩人都爲我工作。很好的幫助! – TheLifeOfSteve 2011-02-03 16:42:14

11

由於您使用的是Django的許可制度,它是更好的你使用下面的g模板語法...

{%if perms.followup.add_followup%}your URL here{%endif%} 

編輯:Django自動爲每個模型創建3個權限,'添加','更改'和'刪除'。如果存在添加一個鏈接沒有模型,則必須從相關模型添加的權限,在模型類元......同樣:

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是您在允許添加到其車型之一的一個應用的名稱。

2

Django文檔詳細答案#2: https://docs.djangoproject.com/en/dev/topics/auth/#id9

The currently logged-in user's permissions are stored in the template variable {{ perms }}. This is an instance of django.contrib.auth.context_processors.PermWrapper, which is a template-friendly proxy of permissions.

2

這是我最簡單的解決方案,在您的模板添加此:

例如:

....... 

{% if 'user.can_drink' in user.get_all_permissions %} 
    {{ user }} can drink. 
    ....... 
{% else %} 
    {{ user }} can´t drink. 
    ........ 
{% endif %} 

.......