模板标记和权限不起作用

时间:2015-08-26 13:37:22

标签: python django django-templates django-permissions

我无法获得使用{% if perms.myapp.foo %} <p>In lookup works, too.</p> {% endif %} 加载的django模板的权限。

inclusion_tag

以上在我的&#34; main&#34;从我的视图中调用的模板。

但是,如果我在request模板中使用相同的代码,那么它就不起作用。我想也许是因为标签没有通过{{ perms }}

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

拥有超级用户&#39;的用户状态也会失败,如果takes_context丢失,这是有道理的。

我调查了y doco link here,但还没有能够做到这一点。不确定那是否会让我误入歧途?

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

  • 想出来,将我的更新移到了一个“答案”中。下方。

1 个答案:

答案 0 :(得分:1)

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

所以我按照用户'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
  • 然后,您可以将要从“主”模板传递的context个变量添加到return中的“自定义标记”中。就我而言,我需要传递的perms变量。
  • 完成上述操作后,我可以在代码模板中执行通常的{% if perms.myapp.foo %}等代码:)

在Django doco中解释here然而我有点困惑,因为我将上下文变量与特定于标签的变量混合在一起但是从上面可以看出,那不是问题!