Django数据库迁移遇urls.E006错误:STATIC_URL必须以斜杠结尾
Django迁移数据库时STATIC_URL相关报错解决方案
报错原因分析
两个报错的核心原因是混淆了Django中STATIC_URL和静态文件本地路径配置的作用:
- 第一个
AttributeError: 'PosixPath' object has no attribute 'startswith'报错:Django部分低版本的配置项不支持Path类型的对象,需要传入字符串格式的值。 - 第二个
urls.E006报错:STATIC_URL的作用是定义前端访问静态资源的URL前缀,不是本地文件系统路径,强制要求以斜杠结尾,你将本地路径赋值给该配置项,自然不符合校验规则。
正确配置方案
1. 修正STATIC_URL配置
STATIC_URL直接配置为访问静态资源的URL前缀即可,和你本地的svelte目录无关,示例:
STATIC_URL = "/static/" # 如果需要自定义前缀也必须是字符串格式,首尾带斜杠,比如: # STATIC_URL = "/svelte-static/"
2. 配置svelte静态文件的本地读取路径
如果你需要Django直接读取svelte项目public目录下的静态资源,应该配置STATICFILES_DIRS(开发阶段适用)或者STATIC_ROOT(生产阶段collectstatic后的存放路径):
# 开发阶段:告诉Django额外去这个目录查找静态资源 STATICFILES_DIRS = [ BASE_DIR.parent / "svelte" / "public" ] # 低版本Django不支持Path对象的话,加str()包裹即可: # STATICFILES_DIRS = [str(BASE_DIR.parent / "svelte" / "public")] # 生产阶段:配置collectstatic命令收集静态资源的输出目录 # STATIC_ROOT = BASE_DIR.parent / "collected_static"
验证方法
配置修改完成后重新执行迁移命令即可,不会再出现上述两个报错。
内容的提问来源于stack exchange,提问作者JoJo Yawson
相关产品推荐
相关产品推荐

