为什么我的Jinja2代码运行后无法正常渲染HTML页面?
问题根因
Jinja2模板变量未正常渲染,由以下几个常见问题导致:
- 模板存放路径不符合Flask默认规则:Flask默认只会读取项目根目录下
templates文件夹内的文件作为Jinja模板,如果你把html文件放在根目录、其他命名文件夹,又没有手动配置模板路径,Flask不会解析文件里的{{ }}语法,会直接把内容当纯静态文本返回。 - HTML结构不合法:你把属于正文内容的
<h2>标签写在了<head>标签内部,浏览器解析DOM时会自动调整这部分内容的位置,可能引发渲染异常。 - 路由传参缺失:你写的
/about路由调用render_template时没有传入title变量,对应页面的模板变量会被渲染为空值,看不到动态内容。 - 页面打开方式错误:如果直接双击本地html文件通过file协议打开,请求根本不会经过Flask后端的渲染流程,Jinja语法自然不会被解析替换。
修复方案
- 先调整项目目录结构,严格匹配Flask默认的模板查找规则,参考结构如下:
your_project/ ├── app.py # 你的Flask主运行文件 └── templates/ # 文件夹名必须为templates,全小写 ├── index.html └── about.html
- 修正模板HTML结构,把正文标签移到
<body>内部,修正后的index.html代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ title }}</title> </head> <body> <h2>{{ title }}</h2> </body> </html>
- 补全
/about路由的参数传递,修改app.py中对应路由的代码:
@app.route('/about') def about(): title = 'About' return render_template('about.html', title=title)
- 启动Flask服务后,通过
http://127.0.0.1:5000访问对应路由,不要直接打开本地html文件。如果之前已经启动过服务,先停掉进程重新运行,同时按Ctrl+F5强制刷新浏览器,避免缓存导致修改不生效。
如果完成以上调整还是不生效,检查你是否在Flask初始化时自定义过
template_folder参数,如果有自定义配置,需要把模板文件放到你配置的对应路径下。
内容的提问来源于stack exchange,提问作者jerardhinho
相关产品推荐
相关产品推荐

