Django模板 - 动态变量名称

时间:2013-06-17 13:23:33

标签: django

下午好,

如何在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)  

2 个答案:

答案 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