Django模板语法错误:无法解析user.has_perm权限检查表达式
解决Django模板权限检查的TemplateSyntaxError问题
你遇到的错误是因为Django模板语法不支持带括号的方法调用,user.has_perm('myblog.add_Post')这种写法不符合模板语法规则,下面给你两种可行的解决方案:
方案一:使用内置的perms变量(推荐)
Django会自动在模板上下文注入perms对象,直接通过perms.应用名.权限码就能判断用户是否拥有对应权限,写法更简洁直观:
修改后的模板代码:
{% extends 'base.html' %} {% block title %} Add Post... {% endblock %} {% block content %} {% if user.is_authenticated and perms.myblog.add_post %} <h1>Add A Blog Post</h1> <br/><br/> <div class="form-group"> <form method="POST"> {% csrf_token %} {{form.as_p}} <button class="btn btn-outline-success">Post</button> </form> </div> {% else %} Access Denied! {% endif %} {% endblock %}
注意:Django默认生成的权限码中,模型名是小写的(比如Post模型对应
add_post而非add_Post),如果你的权限是自定义的则另说,否则要修正大小写避免权限判断失效。
方案二:调整user.has_perm的模板写法
如果一定要使用user.has_perm方法,模板中调用时不需要加括号,参数直接跟在方法名后用空格分隔:
{% if user.is_authenticated and user.has_perm 'myblog.add_post' %}
这种写法也能正常工作,但不如perms变量直观,官方更推荐第一种方案。
内容的提问来源于stack exchange,提问作者QuadFather
相关产品推荐
相关产品推荐

