模板标签和权限不起作用
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 但没能成功。不确定那是否让我走错了路?
========更新==============================
- 想通了,已将我的更新移至下面的 'Answer'。
按照建议回答我自己的问题。
所以我按照用户 '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 但是我有点困惑,因为我将上下文变量与特定于标签的变量混合在一起,但正如您从上面看到的那样,这不是问题!
我无法获得在使用 inclusion_tag
.
{% 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 但没能成功。不确定那是否让我走错了路?
========更新==============================
- 想通了,已将我的更新移至下面的 'Answer'。
按照建议回答我自己的问题。
所以我按照用户 '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 但是我有点困惑,因为我将上下文变量与特定于标签的变量混合在一起,但正如您从上面看到的那样,这不是问题!