Django集成Scrapy运行runserver报list无startswith属性错误
问题现象
Scrapy爬虫与Django框架集成开发完成后,执行runserver命令启动服务时抛出异常,错误栈最终定位到Django内部_add_script_prefix方法,执行value.startswith(("http://", "https://", "/"))逻辑时抛出如下错误:
AttributeError: 'list' object has no attribute 'startswith'
排查过程
- 最初误判错误来自Django框架本身,先后排查Cruises模型定义、views视图逻辑、urls路由配置、basic.html模板代码,尝试删除所有迁移文件、移除
db.sqlite3重置数据库,均未解决问题。 - 后续排查确认异常与
settings.py静态资源配置相关:原有配置MEDIA_ROOT = os.path.join(BASE_DIR, 'media')用于指定媒体文件存储路径,根urls.py中通过static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)挂载媒体路由,这套配置逻辑在其他Scrapy+Django集成项目中可正常运行,本次却触发异常。
根因及修复方案
错误根因:配置失误,将MEDIA_URL误写为空列表[],不符合该配置项要求的字符串格式,导致Django处理路由前缀时拿到列表类型值调用字符串专属的startswith方法触发类型错误。
修复操作:将MEDIA_URL配置修正为正确的字符串格式'/media/',重启服务后异常完全消失。
内容的提问来源于stack exchange,提问作者tesla john
相关产品推荐
相关产品推荐

