在Django模板中检查权限不起作用。

4

我想在模板中验证用户权限,如果用户有权限,他/她将能够访问该模板。在编写以下代码并授予用户权限后,当我查看页面时,它会落在{% else %}语句上,显示用户没有权限。我该怎么做?

#CREATED A GROUP IN DJANGO ADMIN CALLED 'Premium'

Class Paid(models.Model):
    #models here

    class Meta:
        permissions=(
             ("view_film","Can view film"),
        )

视图

def eyo(request):
    return render_to_response('eyo.html',context_instance=RequestContext(request))

模板

{% block content %}

  {% if perms.paid.can_view_film %}

      <form action='https://www.test.com/checkout' method='post'>
      <input name='submit' type='submit' value='Checkout' />
     </form>

   {% else %}

    <p> yo broke! </p>

  {% endif %}

请发表您的观点。 - Sid
请查看类似问题的链接:https://dev59.com/4Gox5IYBdhLWcg3wDgEz - Shreeyansh Jain
安斯,我已经尝试了但没有成功! - picomon
在您的视图或自定义管理视图中,请确保传递请求对象或上下文。有时在自定义视图时,上下文未被传递且权限未被正确填充。 - Fer Mena
2个回答

3

你的模板中是否传递了perms权限参数?

你是否在视图函数中显式设置了perms.paid.can_view_film,或者通过管理员界面进行了设置?

该用户是否属于具有perms.paid.can_view_film权限的组?

请确认应用程序名称是否为“paid”?它应该是应用程序名称,而不是模型名称。

Django权限


我已经在上面发布了我的观点。我通过管理员界面授予了权限。该用户是“高级”组的一部分。 - picomon
1
“paid” 应该是您的应用程序名称。您的应用程序名称是什么? - Sid
artapp是应用程序的名称。Paid是模型。 - picomon

2

我正在一个Django项目中进行基于权限的条件渲染。其中一个小例子是特定图标的显示。如果用户具有删除权限,则会看到一个图标,否则将看到另一个图标。以下是在我的模板中实现它的方式:

{% if perms.List.can_delete_list %}
    <li><a href="/social/a/search/" class="settings-edit"><span class="fui-search"></span></a></li>
{% else %}
    <li><a href="{% url 'dashboard_edit' %}" class="settings-edit"><span class="fui-new"></span></a></li>
{% endif %}

如果已经登录的用户拥有can_delete_list权限,他们将看到一件事情。如果没有该权限,他们会看到其他内容。这样解释清楚了吗?

我应该补充一下,这里的List是一个类。 - Chris Clouten
这就是我之前所做的。只是paid没有大写。我把paid改成了Paid,但它还是不起作用。 - picomon
你是否通过Django管理界面手动授予了用户权限?如果是这样,请关闭服务器并重新启动。我曾经因此遇到了权限基础视图的问题。我的第二个建议是在使用自定义权限之前尝试使用内置的Django权限来确保您可以使其正常工作。在我的例子中,“can_delete_list”是Django自动生成的权限。 - Chris Clouten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接