Django - 如何使用自定义模板标签与'if'和'其他'检查? [英] Django - How to use custom template tag with 'if' and 'else' checks?
问题描述
我已经使用python创建了自定义模板标签:
I have made a custom template tag for permissions using 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 ""
然后我加载并在我的模板中使用这个:
Then I loaded and used this in my template like this:
{% load usr_perm %}
{% get_user_perm request "add_users" %}
哪个返回打印为True。现在我想用它作为一个检查,如果用户有权限吗?如果和 else
条件,我该如何使用此模板标签与
目前我正在使用它:
Which in return prints True. Now I want to use it as a check if user has permission or not? How can I use this template tag with if
and else
conditions?
Currently I am using it like this:
{% if get_user_perm request "add_users" %}Can Add User{% else %} Permission Denied {% endif %}
有什么办法可以调整模板标签的代码或任何提示在模板中使用模板标记。
注意:以前我正在使用Django的权限,如下所示 {%if perms.profile.add_user%}
但由于某些原因我必须自己编写模板标签!
任何帮助将不胜感激!谢谢
Is there any way that I can tweak in template tag's code or any hint to use template tag in template.
N.B: Previously I was using Django's permissions like this {% if perms.profile.add_user %}
but due to some reasons I have to write my own template tag now!
Any help will be greatly appreciated! Thanks
推荐答案
您应该使用分配标记
:
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 ""
并在模板中加载标签后。使用它像:
And after loading tags in templates . use it like :
{% get_user_perm "add_users" as add_users_flag %}
## you can check like this
{% if add_users_flag %} {% else %} {% endif %}
这篇关于Django - 如何使用自定义模板标签与'if'和'其他'检查?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!