下午好,
如何在Django模板中使用变量变量名?
我有一个使用context
的自定义身份验证系统,has_perm
检查用户是否有权访问指定的部分。
deptauth
是一个带有限制组名称的变量,即SectionAdmin。我认为has.perm
实际上正在检查'deptauth'
,而不是我想要的变量值SectionAdmin
。
{%if has_perm.deptauth %}
我该怎么做? has_perm.{{depauth}}
或类似的东西?
编辑 - 更新代码
{% with arg_value="authval" %}
{% lookup has_perm "admintest" %}
{% endwith %}
{%if has_perm.authval %}
window.location = './portal/tickets/admin/add/{{dept}}/'+val;
{% else %}
window.location = './portal/tickets/add/{{dept}}/'+val;
{%endif%}
has_perm不是一个对象..它在我的上下文处理器(permchecker)中:
class permchecker(object):
def __init__(self, request):
self.request = request
pass
def __getitem__(self, perm_name):
return check_perm(self.request, perm_name)
答案 0 :(得分:3)
你最好自己编写custom template tag。对于这种情况来说,做起来并不困难。
我没有对此进行过测试,但这些方面的内容应该可行。记得妥善处理错误!
def lookup(object, property):
return getattr(object, property)()
register.simple_tag(lookup)
如果您尝试获取属性而不是执行方法,请删除()
。
并使用它:
{% lookup has_perm "depauth" %}
请注意,has_perm
是变量,"depauth"
是字符串值。这将传递字符串进行查找,即获取has_perm.depauth
。
您可以使用变量调用它:
{% with arg_value="depauth_other_value" %}
{% lookup has_perm arg_value %}
{% endwith %}
表示变量的值将用于查找,即has_perm.depauth_other_value
'。
答案 1 :(得分:1)
你可以这样试试,
{{ dict|key:key_name }}
过滤器:
def key(d, key_name):
return d[key_name]
key = register.filter('key', key)
更多信息,django ticket