You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask实现图片轮播循环报错:TypeError: 'module' object is not callable

解决Flask图片轮播的glob调用错误及相关问题

首先,你碰到的TypeError: 'module' object is not callable是因为你直接把glob模块当成函数调用了——glob是一个模块,你需要调用它里面的glob()函数(也就是glob.glob())来匹配文件路径。除此之外,你的代码还有几个小问题需要调整才能让轮播正常工作,我一步步给你修正:

1. 修复glob调用错误并正确获取图片路径

原来的代码里ruta_imagenes = glob(os.path.join(app.static_folder, "img"))只是拿到了img文件夹的路径,没有匹配里面的图片文件。我们需要用glob.glob()加上通配符来获取所有图片(比如匹配.jpg、.png等),然后把绝对路径转换成Flask模板能使用的static相对路径:

修改后的Python代码:

from flask import Flask, render_template, url_for
import glob
import os.path

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    # 匹配img文件夹下的所有图片文件,这里用*.*匹配所有,你可以改成*.jpg/*.png更精准
    img_folder = os.path.join(app.static_folder, "img", "*.*")
    # 使用glob.glob获取所有匹配的文件路径
    absolute_paths = glob.glob(img_folder)
    # 转换为Flask能识别的static URL路径(比如/static/img/xxx.jpg)
    ruta_imagenes = [url_for('static', filename=f"img/{os.path.basename(path)}") for path in absolute_paths]
    return render_template('index.html', ruta_imagenes=ruta_imagenes )

if __name__ == '__main__':
    app.run(debug=True)

2. 修正HTML模板中的问题

你的模板里有两个小错误:变量名不匹配(Python传的是ruta_imagenes,模板里写的是rutas_imagenes),还有active类的位置不对,以及Jinja2循环中enumerate的写法:

修改后的HTML代码:

<div class="carousel-inner">
    {% for idx, ruta in enumerate(ruta_imagenes) %}
    <div class="carousel-item {% if idx == 0 %}active{% endif %}">
        <img src="{{ ruta }}" class="d-block w-100" alt="轮播图片">
    </div>
    {% endfor %}
</div>

关键问题说明

  • glob模块调用:记住glob是模块,必须用glob.glob()来执行文件匹配操作,直接调用glob()会把模块本身当成函数,触发类型错误。
  • 路径处理:Flask模板中引用static文件需要用相对路径(通过url_for生成),不能直接用本地绝对路径,否则前端无法访问到图片。
  • 变量名一致性:Python视图函数传递的变量名要和模板里使用的完全一致,否则模板会找不到变量。

内容的提问来源于stack exchange,提问作者Joshua Flores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:50:24