Django The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting问题的解决方法

解决方法

在设置STATICFILES_DIRS时路径不能包含STATIC_ROOT的路径,可以给其配置不同的路径,也可以在开发完成并打包后删除STATICFILES_DIRS的配置。

STATICFILES_DIRS是我们开发时存放静态文件的位置。在部署上线前执行collectstatic,我们使用的静态文件会被自动打包到STATIC_ROOT,因此如果出现了包含,在逻辑上就出现了我把自己打包到自己里面,这在逻辑上就是行不通的。

问题说明

今天在学习Django的admin-simpleUI时遇到一个问题

为了使simpleUI在非debug模式使用需要collectstatic一下,于是我按照官网的指示配置了一下

simpleUI说明文档

然后在设置STATIC_ROOT时出现了错误

# 出错的代码
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")	#<========
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),			#<========
]
# django给的错误说明
# The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

看书面意思是地址不能相互包含?可是我这个路径与说明文档一模一样的啊

在这里插入图片描述

于是乎想要到网上找一下大佬们的解决方法,然后发现网上铺天盖地的解决方案是

STATIC_ROOT=os.path.join(BASE_DIR,"static/")#错误
STATIC_ROOT=os.path.join(BASE_DIR,"/static/")#正确

我也按照这个方法改了一下,的确没有再报错。

然后我collectstatic了一下,也没有报错但是我看了一眼记录发现:这静态文件copy的位置不对啊?!

于是我打印了一下路径发现:

F:/static/
['F:\\workerspace\\Tnt\\static']

这个拼接似乎有问题啊?于是我又找了一下os.path.join相关的知识,发现这里还真有坑:

使用os.path.join第二个参数的首个字符如果是"/" , 拼接出来的路径会不包含第一个参数

import os
a = os.path.join("/test1", "/test2")
print(a)
b = os.path.join("/test1", "test2")
print(b)
# a==>/test2
#b===>/test1/test2

所以上述解决方法的实质是改了一下STATIC_ROOT的路径,属于看似解决了问题,这些文件在打包上线时实际上是会丢失的,转发的应该大都跟我一样是不知其所以然.

想要解决问题还是要弄明白这几项配置是为什么配置的

Django配置文件里的STATIC_ROOT、STATICFILES_DIRS、STATIC_URL的区别

更改一下,问题解决。

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "images"),
]
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

至于simpleUI坑人的说明,可能开发者也没想到会有我这样连配置项干什么的都不清楚的菜鸡去用他们的东西吧

  • 19
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值