Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Permissions Django管理员,如何正确检查用户';在django模板中的权限?_Permissions_Django Templates_Django Admin - Fatal编程技术网

Permissions Django管理员,如何正确检查用户';在django模板中的权限?

Permissions Django管理员,如何正确检查用户';在django模板中的权限?,permissions,django-templates,django-admin,Permissions,Django Templates,Django Admin,我是新手。我的申请名字是ccad。型号名称是logbook。用户A无权从可用的用户权限中编辑、添加或删除日志模型 所以我试着对用户A隐藏保存、保存和继续编辑、保存和添加其他按钮 我遵循了在SO中找到的建议。 来自皮科蒙的询问,席德回答了。和 最后我把下面的代码写到了我的模板中 更改位于{{template folder}}/admin/app_name/model_name的_form.html/ {%if perms.ccad.add_logbook%} {%endif%} 但是没有权

我是新手。我的申请名字是ccad。型号名称是logbook。用户A无权从可用的用户权限中编辑、添加或删除日志模型

所以我试着对用户A隐藏保存、保存和继续编辑、保存和添加其他按钮

我遵循了在SO中找到的建议。 来自皮科蒙的询问,席德回答了。和

最后我把下面的代码写到了我的模板中

更改位于{{template folder}}/admin/app_name/model_name的_form.html/
{%if perms.ccad.add_logbook%}
  • {%endif%}
    但是没有权限的用户仍然可以看到我提到的按钮

    我还尝试将
    {%if perms.ccad.add_logbook%}
    更改为
    {%if perms.ccad.can_add_logbook%}
    ,但没有效果


    最好的方法是什么?

    首先在模板上下文中检查perms变量。在模板可见的地方添加一个
    …{{perms}}…
    。它应该像这样呈现,
    ……

    如果不是这种情况,则缺少模板中的权限

    验证设置
    TEMPLATE\u CONTEXT\u PROCESSORS
    元组是否包含
    django.contrib.auth.CONTEXT\u PROCESSORS.auth

    在呈现模板时,还要确保使用
    RequestContext
    而不是
    Context

    如果您最终看到一个PermWrapper,但您的权限检查仍然不起作用,请将以前的调试更改为
    。{{{perms.ccad}}…
    。 这应该输出类似于“set([u'ccad.add_…',…])的内容

    如果不是,则您的应用程序可能不会被调用
    ccad

    最后,在创建if条件之前,请确保权限返回一些“…{perms.ccad.add_logbook}}…”。这应该返回True或False

    现在我已经讲完了,我注意到你的问题正好相反,到目前为止我写的都是无用的。:)


    {{user.is_superuser}}
    添加到模板中。如果为True,则当前用户拥有超级用户权限,即使对于
    {{perms.omg.can_facepalm}也始终返回True

    我无法将模板上下文处理程序放在我的settings.py上,而且我正在使用我的超级用户帐户来测试模板。+1是为了给我一个测试模板变量的想法。我忘记了那一个。
    模板上下文处理程序
    有一个默认列表。我认为
    django.contrib.auth.CONTEXT\u PROCESSORS.auth
    在该列表中
     {% if perms.ccad.add_logbook %}
        <li><input type="submit" value="{% trans 'Save ' %}" class="grp-button grp-default" name="_save" {{ onclick_attrib }}/></li>     
        <li><input type="submit" value="{% trans 'Save and add another' %}" class="grp-button" name="_addanother" {{ onclick_attrib }} /></li>
        <li><input type="submit" value="{% trans 'Save and continue editing' %}" class="grp-button" name="_continue" {{ onclick_attrib }}/></li>        
     {% endif %}