Flask中send_from_directory正常但render_template失败是什么原因?
问题根源
- 原代码中
send_from_directory是直接返回静态文件,不会解析文件内的Jinja2模板语法,即使原index.html里有{{ card.xxx }}这类模板占位符,也会作为普通文本返回给浏览器,不会触发变量校验。 - 改为
render_template后,Flask会调用Jinja2引擎解析模板,所有模板中用到的变量都必须从视图函数显式传入,你当前的视图函数没有传递card变量,因此触发未定义报错。 - 将static文件夹重命名为templates的操作符合Flask默认的模板查找规则,这一步没有问题。
修复方案
- 先梳理
index.html中所有用到card相关变量的位置,确认需要传入的变量结构:是单个card对象,还是包含多个card的列表。 - 调整视图函数的代码,在调用
render_template时传入对应的变量,示例如下:
# 按照你项目的实际逻辑获取卡片数据,以下为示例代码 from .models import Card cards = Card.query.all() # 渲染时传入变量 return render_template('index.html', cards=cards)
- 如果你不需要对应位置做动态渲染,也可以用Jinja的
raw标签包裹占位符,让引擎跳过解析直接输出原始文本:
{% raw %} {{ card.content }} {% endraw %}
内容的提问来源于stack exchange,提问作者chargingBrontosaurus
相关产品推荐
相关产品推荐

