Django modu的用户权限

2024-04-29 04:07:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 项目django用户add模板权限内容li
3条回答

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.

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

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

相关问题 更多 >