这是我的simple_tag代码
@register.simple_tag
def has_right(request,groupname):
if permission(request,groupname):
return True
return False
这就是我在模板
中尝试做的事情 {% if has_right request 'admin' %}
display admin link
{%endif%}
但它抱怨
Exception Value:
Unused 'request' at end of if expression.
在django模板中还有其他方法来评估标记结果吗?
答案 0 :(得分:13)
如果你需要计算一个值,你不需要一个标记,你想要一个过滤器。
@register.filter
def has_right(request,groupname):
...
{% if request|has_right:groupname %}
答案 1 :(得分:0)
它之所以没有按照你想要的方式运行,是因为模板处理器看到了{%if%}标签并开始将其作为{%if%}标签处理,这不是你想要的。看起来你想要一种复杂的表达式,它会评估if的内容,然后将其用于条件处理。
我不太确定这是否是您的意思,但我认为更简单的解决方案是使用Django中的内置权限。每个用户对象都已经附加了权限,添加和删除新权限也相当简单。 https://docs.djangoproject.com/en/dev/topics/auth/#permissions是您要查看的链接。所以在那里,你应该在你的模型中或在视图中动态设置一些权限,然后在模板方面,你所要做的就是说
# Note that perms is a shortcut. Its the same as saying user.has_perm('')
{% if perms.has_that_permission %}
但是比我想的还要冷却,每个用户都已经拥有了is_staff和is_superuser。因此,如果您的应用目前没有使用这些内容,我认为至少使用is_staff为您的网站授予用户权限是没有害处的。确保你没有给他们超级用户权限,因为超级用户意味着任何对user.has_perm()的调用都将返回TRUE,无论如何。
答案 2 :(得分:0)
您可以使用分配标记。
@register.assignment_tag(takes_context=True)
def has_right(context,groupname):
request = context['request']
if permission(request,groupname):
return True
return False
在模板中
{% has_right as right %}
{% if right request 'admin' %}
display admin link
{%endif%}