You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:12:38