Django - 如何使用'if'和'else'检查自定义模板标签?

时间:2014-03-21 10:22:13

标签: python django django-templates

我使用python创建了权限的自定义模板标记:

register = template.Library()

@register.simple_tag
def get_user_perm(request, perm):
    try:
        obj = Profile.objects.get(user=request.user)
        obj_perms = obj.permission_tags.all()
        flag = False
        for p in obj_perms:
            if perm.lower() == p.codename.lower():
                flag = True
                return flag
        return flag
    except Exception as e:
        return ""

然后我在我的模板中加载并使用了这个:

{% load usr_perm %}
{% get_user_perm request "add_users" %}

返回打印True。现在我想用它来检查用户是否拥有权限?如何在ifelse条件下使用此模板代码? 目前我正在使用它:

{% if get_user_perm request "add_users" %}Can Add User{% else %} Permission Denied {% endif %}

有没有办法可以调整模板标签的代码或任何提示在模板中使用模板标签。
N.B:以前我使用的是Django的权限{% if perms.profile.add_user %},但由于某些原因,我现在必须编写自己的模板标签!
任何帮助将不胜感激!感谢

1 个答案:

答案 0 :(得分:26)

您应该使用Assignment tags

register = template.Library()

@register.assignment_tag(takes_context=True)
def get_user_perm(context, perm):
    try:
        request = context['request']
        obj = Profile.objects.get(user=request.user)
        obj_perms = obj.permission_tags.all()
        flag = False
        for p in obj_perms:
            if perm.lower() == p.codename.lower():
                flag = True
                return flag
        return flag
    except Exception as e:
        return ""

在模板中加载标签后。使用它像:

{% get_user_perm "add_users" as add_users_flag %}
## you can check like this
{% if add_users_flag %} {% else %} {% endif %}