jinja2渲染模板报Missing end of comment tag错误如何处理
问题根因
你的判断是对的,报错由Jinja2默认语法和CSS语法冲突导致:
Jinja2默认将{#识别为模板注释的起始标记,会持续向后查找对应的结束标记#},直到文件末尾找不到就会抛出Missing end of comment tag错误。你模板里的CSS片段中,大括号{和紧邻的ID选择器前缀#刚好拼接成了{#组合,被Jinja2误判为注释开头,最终触发报错。
解决方法
根据模板实际情况二选一即可:
- 方法1:标记原生内容块(推荐,无需改动全局配置)
用Jinja2提供的raw块包裹所有不需要模板解析的CSS、JS代码段,Jinja2会完全忽略块内的语法,直接原样输出内容,示例:
这种方式不需要调整模板里其他正常的Jinja2变量、逻辑代码,适配成本最低。<style> {% raw %} /* 所有CSS代码放在raw标签内部,包括你提到的那行规则 */ */#sidebar{position:absolute;top {% endraw %} </style> - 方法2:自定义Jinja2全局分隔符
如果模板里CSS/JS和Jinja2语法冲突的位置非常多,可以在初始化Jinja2环境时修改默认的分隔符规则,避开前端常用的符号组合,示例代码:
*注意:修改全局分隔符后,模板内所有Jinja2变量、逻辑块、注释的写法都要对应替换为新的分隔符格式,比如原来的templateEnv = jinja2.Environment( loader=templateLoader, # 替换默认分隔符为不会和前端语法冲突的组合 comment_start_string='{=', comment_end_string='=}', variable_start_string='{{=', variable_end_string='=}}', block_start_string='{%=', block_end_string='=%}' ){{ json_data.document_number }}需要改写为{{= json_data.document_number =}}。
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

