Django添加static配置后出现'module' object is not callable错误求助
解决Django中添加static媒体路由时出现的TypeError: 'module' object is not callable错误
这个错误的核心原因很明确:你当前导入的static是一个Python模块,而不是可调用的函数,所以当你尝试像调用函数一样使用它时就会触发这个报错。
问题出在你的导入语句
你现在的导入是:
from django.conf.urls import static
这里的static是django.conf.urls下的一个子模块,而不是我们需要用来生成媒体文件路由的static()函数。
两种快速修复方案
方案1:修正导入路径
把导入语句改成从django.conf.urls.static模块导入static函数:
from django.conf.urls import url, include from django.contrib import admin from django.conf.urls.static import static # 正确的导入方式 from django.conf import settings
之后你的原有路由代码就可以正常工作了:
urlpatterns = [ # 你的其他路由,比如admin、应用路由等 url(r'^admin/', admin.site.urls), # ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
方案2:直接调用模块内的函数(不修改导入)
如果你不想调整导入语句,可以直接通过模块路径调用static函数:
urlpatterns = [ # 你的其他路由 ] + django.conf.urls.static.static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
额外验证点
你的媒体文件配置可以再优化得更直观些,避免lambda可能带来的混淆:
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'这样能更清晰地指向项目中
media文件夹的绝对路径。注意:
static()函数仅适用于开发环境,在Heroku这样的生产环境中,Django不应该直接用来服务媒体文件,建议配置云存储(比如AWS S3)或者使用Heroku的静态文件服务插件来处理媒体文件。
内容的提问来源于stack exchange,提问作者Watch
相关产品推荐
相关产品推荐

