Django-如何使用带有“if”和“else”检查的自定义模板标记?

2024-05-12 09:01:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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" %}

作为回报,这是真的。现在我想用它来检查用户是否有权限?如何将此模板标记与ifelse条件一起使用? 目前我正在这样使用它:

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

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


Tags: 标记registeradd模板obj权限getreturn
1条回答
网友
1楼 · 发布于 2024-05-12 09:01:22

您应该使用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 %}

相关问题 更多 >