3

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

4 回答 4

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是您将权限添加到其模型之一的应用程序的名称。

于 2011-02-03T16:33:34.943 回答
2

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

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

于 2012-02-28T21:38:02.877 回答
2

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

例如:

.......

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

.......
于 2012-06-08T16:26:57.353 回答
1

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

这种复杂的决策进入视图函数。

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

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 %}
于 2011-02-03T16:29:17.387 回答