Flask+Jinja渲染囚犯信息表格失败:Jinja代码直接显示求助
问题描述
我尝试使用Flask与Jinja渲染囚犯信息表格,已在Python文件中定义表头与数据并通过render_template传递至info.html,但页面未渲染出表格,反而直接显示Jinja模板代码。
Python代码
headings = ("First", "Last", "Court Date", "Bond Amount", "Bond Paid", "Charges") data = ( ("Carl", "Johnson", "12/12/2023", 1200, 900, "Murder"), ("Joe", "Lewis", "10/22/2023", 2000, 890, "Theft"), ("Jarod", "Green", "11/29/2023", 1900, 700, "Robbery") ) @views.route("/info/") def info(): return render_template("info.html", headings=headings, data=data)
HTML代码(info.html)
<table> <tr> {%for header in headings%} <th>{{ header }}</th> {%endfor%} </tr> {%for row in data%} <tr> {%for cell in row%} <td>{{ cell }}</td> {%endfor%} </tr> {%endfor%} </table>
错误原因排查与解决办法
模板文件位置错误
Flask默认从项目根目录下的templates文件夹加载模板,若info.html放错目录,或templates文件夹名称写错(比如写成template),Flask找不到正确模板,会直接返回原始HTML文件,导致Jinja代码不解析。
解决:把info.html放在项目根目录的templates文件夹下,确保文件夹名称是templates(小写复数)。模板文件后缀错误
如果HTML文件后缀不是.html(比如改成了.txt),Flask不会将其当作Jinja模板处理,直接返回原始内容。
解决:确认文件后缀为.html,文件名无误。Flask应用配置错误
若手动修改了TEMPLATE_FOLDER配置但路径错误,也会导致模板不被解析。
解决:检查应用配置,若有app.config['TEMPLATE_FOLDER']设置,确保路径指向正确;无特殊需求的话,用默认templates文件夹即可,不用手动配置。render_template使用错误
要确认是否从flask正确导入了render_template,有没有用错函数,或者传入的模板文件名大小写/拼写错误(Linux系统下文件名区分大小写)。
解决:确保导入语句是from flask import render_template,且render_template("info.html")中的文件名和实际文件名完全一致。浏览器缓存问题
浏览器缓存旧的静态文件,可能导致新模板内容没加载。
解决:按Ctrl+Shift+R强制刷新页面,或清除浏览器缓存后重试。
内容的提问来源于stack exchange,提问作者John Geter

