Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模块的用户权限_Python_Django_Django Templates_Django Views_Django Permissions - Fatal编程技术网

Python Django模块的用户权限

Python Django模块的用户权限,python,django,django-templates,django-views,django-permissions,Python,Django,Django Templates,Django Views,Django Permissions,我在Django模板中的权限有一个小问题 我正试图根据权限在菜单栏中为我的项目显示一个图标。我希望这样,如果用户有权添加新的后续项目,他们可以看到图标,如果他们没有该权限,则不显示链接 我的权限语法是follow.add\u followup,这是我从打印user.get\u all\u permissions()获得的 我在模板中尝试了以下代码: ... {% if user.has_perm('followup.add_followup') %} <li><a href=&

我在Django模板中的权限有一个小问题

我正试图根据权限在菜单栏中为我的项目显示一个图标。我希望这样,如果用户有权添加新的后续项目,他们可以看到图标,如果他们没有该权限,则不显示链接

我的权限语法是
follow.add\u followup
,这是我从打印
user.get\u all\u permissions()
获得的

我在模板中尝试了以下代码:

...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...
。。。
{%if user.has_perm('followup.add_followup')%}
  • {%endif%} ...
    但当我显示模板时,会出现以下错误:

    TemplateSyntaxError位于/project/232/view/

    无法分析“user.has_perm(followup.add_followup)”中的剩余项:“(followup.add_followup)”

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

    我在模板中尝试了以下代码:

    ...
    {% if user.has_perm('followup.add_followup') %}
    <li><a href="{% url followup-new p.id %}">Log</a></li>
    {% endif %}
    ...
    
    这种复杂的决策是在视图函数中进行的

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

    在你看来这样做

    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 %}
    
    {%if followup%}
    
  • {%endif%}
    由于您使用的是Django权限系统,因此最好使用以下G模板语法

    {%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>
    
    如果没有与您希望执行的作业相关的模型,请向模型添加权限

    在模板中,您可以编写

    {{perms.somemodels}}
    

    要将可用权限封存到该用户,其中
    somemodel
    是您将权限添加到其某个型号的应用程序的名称。

    Django文档详细说明了答案#2:

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


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

    例如:

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

    我之所以在模板中尝试它,是因为我不想显示登录用户无法使用的图标。您可以在视图函数中创建一个布尔值,并在模板中使用一个简单的{%if%}来显示或不显示。这不是真的或有帮助的,请参阅下面的答案。谢谢。。。这是迄今为止最有用的答案!更新链接:-适用于Django 1.5至1.7(最新版本)。