Python Django模块的用户权限
我在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=&
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(最新版本)。