Django模板if条件中<=符号导致后续div标签解析异常
问题根因
这是HTML类模板引擎的通用解析规则导致的:模板解析时会优先将<识别为HTML标签的起始符,你写在if判断里的<=的前半段<会被误判为HTML标签开头,直接打断后续模板语法、div标签的解析,和你写的权限判断逻辑本身无关。
另外你当前输出的permission参数值('permission', 0)])存在格式错误,属于传参时拼接异常带了多余的括号、元组闭合残段,正常需要传入纯整型的权限数值,这个问题也会导致判断结果不符合预期,但不是语法断裂的核心诱因。
修复方案
不需要调换判断条件顺序,按以下步骤处理:
- 先修正传参问题:保证模板接收到的permission是0、2、4这类纯整型数值,删掉传参时多余的括号、元组闭合残段,不要传
('permission', 0)])这种结构错误的内容。 - 替换冲突的运算符写法:所有主流HTML模板引擎(Jinja2、Django模板、Twig等)都支持比较运算符别名,不会触发
<的标签识别冲突,<=对应的别名是lte,直接把判断代码改成:
{% if permission lte 4 %} <div class='row'>
改完之后Vim的语法高亮会立刻恢复正常,模板引擎也能正确解析判断逻辑,权限值符合要求时就会正常渲染对应div。
如果用的模板引擎不支持运算符别名,就在判断前先通过过滤器完成比较计算绕开解析冲突,写法如下:
{% set can_show = permission|int <= 4 %} {% if can_show %} <div class='row'>
内容的提问来源于stack exchange,提问作者Dominer
相关产品推荐
相关产品推荐

