我的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)'
有什么想法?这让我很头疼! :)
答案 0 :(得分: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
是您将其权限添加到其某个模型的应用程序的名称。
答案 1 :(得分:2)
Django文档详细说明了答案#2: https://docs.djangoproject.com/en/dev/topics/auth/#id9
当前登录用户的权限存储在模板变量{{perms}}中。这是django.contrib.auth.context_processors.PermWrapper的一个实例,它是一个模板友好的权限代理。
答案 2 :(得分:2)
这是我非常简单的解决方案,在你的模板中添加:
例如:
.......
{% if 'user.can_drink' in user.get_all_permissions %}
{{ user }} can drink.
.......
{% else %}
{{ user }} can´t drink.
........
{% endif %}
.......
答案 3 :(得分: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 %}