使用Flask结合Jinja2渲染npoint虚拟博客JSON遇TemplateSyntaxError求解
问题解决方案
你的后端代码逻辑没有问题——控制台能正常获取并打印JSON数据,说明接口请求、Flask向模板传参的全链路是通的,报错全部来自blog.html模板的两处Jinja语法书写错误:
- 字段访问的字符串引号没有闭合:原代码中访问title字段时写的是
blog_posts["title],在title后面漏了闭合的双引号。Jinja解析器读到这里时会判定字符串还未结束,一路错位匹配后续内容,最终在解析到subtitle那行时抛出“期望逗号、实际读到subtitle”的语法错位报错。 - 循环语法带了多余标点:Jinja的
for循环语法不需要在语句末尾加冒号,你写的{% for blog_posts in posts: %}多了末尾的:,不符合Jinja的模板语法规则。
修正后的blog.html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Blog</title> </head> <body> {% for blog_post in posts %} <h1>{{ blog_post["title"] }}</h1> <h2>{{ blog_post["subtitle"] }}</h2> {% endfor %} </body> </html>
改完这两处语法错误后,页面即可正常循环渲染3篇博客的标题与副标题。
注:循环变量名从
blog_posts调整为blog_post只是更贴合单条博客数据的语义,不影响功能实现,保留原变量名也完全可以。
内容的提问来源于stack exchange,提问作者Vimalan Karunakaran
相关产品推荐
相关产品推荐

