Django模块的用户权限

The*_*eve 3 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 %}
...
Run Code Online (Sandbox Code Playgroud)

但是当我显示模板时,我遇到了这个错误:

/ project/232/view /中的TemplateSyntaxError

无法解析剩余部分:来自'user.has_perm(followup.add_followup)'的'(followup.add_followup)'

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

Fal*_*gel 11

由于您使用的是Django权限系统,因此最好使用以下模板语法...

{%if perms.followup.add_followup%}your URL here{%endif%}
Run Code Online (Sandbox Code Playgroud)

编辑:Django自动为每个模型创建3个权限,'添加','更改'和'删除'.如果没有用于添加链接的模型,则必须在模型类Meta中添加相关模型的权限...同样:

somemodels.py

class SomeModel(Model):
    ...
    class Meta:
    permissions = (('add_followup','Can see add urls'),(...))
Run Code Online (Sandbox Code Playgroud)

在Django auth用户管理页面中,您可以看到您的权限.在模板层中,权限以基本的Django样式呈现,

<app_label>.<codename>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将像:

{%if perms.somemodels.add_followup%}your URL here{%endif%}
Run Code Online (Sandbox Code Playgroud)

如果没有与您希望的工作相关的模型,则将权限添加到模型中...

在您的模板中,您可以编写

{{perms.somemodels}}
Run Code Online (Sandbox Code Playgroud)

密封该用户的可用权限somemodel,您将其权限添加到其某个模型的应用程序的名称.