Jinja2 include模板传参报错:expected token 'end of statement block'
排查Jinja2模板include传参的语法错误
错误原因
你遇到的jinja2.exceptions.TemplateSyntaxError是因为include语句传递参数的语法不符合Jinja2规范。Jinja2要求使用with传参时,必须以键值对形式指定变量,或使用with context传递当前模板的全部上下文,直接传入表达式会触发语法解析错误。
正确写法示例
1. 显式传递指定变量
如果仅需给body.html传递PDF链接参数,需为参数命名(比如pdf_link),以键值对形式传入:
{% include "body.html" with pdf_link=url_for('static', filename='pdf/Lorem-Ipsum.pdf') %}
修改后,可在body.html中通过{{ pdf_link }}调用该链接。
2. 传递当前模板全部上下文
若需要把sfa.html中的所有变量都传递给body.html,可使用with context:
{% include "body.html" with context %}
这种方式下,body.html可直接使用sfa.html中定义的所有变量(需先在sfa.html中定义pdf_link = url_for('static', filename='pdf/Lorem-Ipsum.pdf'))。
常见错误写法(需避免)
以下写法会触发你遇到的语法错误:
- 直接在
with后传入表达式,未指定键值对:{% include "body.html" with url_for('static', filename='pdf/Lorem-Ipsum.pdf') %} with前缺少空格:{% include "body.html"with pdf_link=... %}
验证步骤
将sfa.html中的include语句修改为上述正确格式后,重启服务测试,语法错误即可消除。同时确保body.html中正确引用了传递的变量名。
内容的提问来源于stack exchange,提问作者mano98
相关产品推荐
相关产品推荐

