6

下午好,

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

2 回答 2

3

您最好为此编写自己的自定义模板标签。做起来不难,这种情况也很正常。

我还没有对此进行测试,但是这些方面的东西应该可以工作。记得正确处理错误!

def lookup(object, property):
    return getattr(object, property)()

register.simple_tag(lookup)

如果您尝试获取属性而不是执行方法,请删除那些().

并使用它:

{% lookup has_perm "depauth" %}

请注意,这has_perm是一个变量,并且"depauth"是一个字符串值。这将传递字符串进行查找,即 get has_perm.depauth

您可以使用变量调用它:

{% with arg_value="depauth_other_value" %}
    {% lookup has_perm arg_value %}
{% endwith %}

这意味着变量的值将用于查找它,即has_perm.depauth_other_value'.

于 2013-06-17T13:26:37.523 回答
1

你可以这样试试

{{ dict|key:key_name }}

筛选:

def key(d, key_name):
    return d[key_name]
key = register.filter('key', key)

更多信息,django 票

于 2013-06-17T13:46:36.293 回答