Django模块的用户权限

时间:2011-02-03 16:24:42

标签: python django django-templates django-views django-permissions

我的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)'

有什么想法?这让我很头疼! :)

4 个答案:

答案 0 :(得分:11)

由于您使用的是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是您将其权限添加到其某个模型的应用程序的名称。

答案 1 :(得分:2)

Django文档详细说明了答案#2: https://docs.djangoproject.com/en/dev/topics/auth/#id9

  

当前登录用户的权限存储在模板变量{{perms}}中。这是django.contrib.auth.context_processors.PermWrapper的一个实例,它是一个模板友好的权限代理。

答案 2 :(得分:2)

这是我非常简单的解决方案,在你的模板中添加:

例如:

.......

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

.......

答案 3 :(得分:1)

  

我在我的模板中试过这段代码:

这种复杂的决策是在视图函数中进行的。

或者它进入上下文,然后呈现给模板。

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