模板标签和权限不起作用

template tag and permissions not working

我无法获得在使用 inclusion_tag.

加载的 django 模板中工作的权限
{% if perms.myapp.foo %}
     <p>In lookup works, too.</p>
{% endif %}

以上在我的 "main" 模板中运行良好,从我的视图调用。

但是,如果我在 inclusion_tag 模板中使用相同的代码,它就不起作用。我想可能是因为标签没有通过 request?

django doco here 说用户权限存储在模板变量 {{ perms }} 中。这是否不适用于自定义标签?我假设这个 应该 工作,无法想象为什么会这样设计?

具有 'superuser' 状态的用户也会失败,如果缺少 {{ perms }} 则有意义。

我调查了 takes_context doco link here 但没能成功。不确定那是否让我走错了路?

========更新==============================

按照建议回答我自己的问题。

所以我按照用户 'alasdair' 的建议进一步调查了 'takes_context'。结果我让它工作了。这是我找到的。

里面 myapp-tags.py:

@register.inclusion_tag('templatefilename.html', takes_context=True)
def show_mycustomtag(context, start_date, end_date):

 #your code here 

return {
    'start_date': start_date,
    'end_date': end_date,

    'perms': context['perms']
}
  • 注册包含标签时必须添加takes_context=True
  • 然后您可以添加您想要从 'main' 模板传递到 return 中的 'custom tag' 的任何 context 变量。在我的例子中,我需要传递 perms 变量。
  • 完成上述操作后,我就可以在我的标签模板中执行通常的 {% if perms.myapp.foo %} 等代码 :)

它在 Django doco 中进行了解释 here 但是我有点困惑,因为我将上下文变量与特定于标签的变量混合在一起,但正如您从上面看到的那样,这不是问题!