【发布时间】:2020-10-02 11:47:54
【问题描述】:
我很难理解静态文件在 Django 3.0.7 上的工作原理
在我的settings.py 文件中,我写道:
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
STATIC_ROOT = os.path.join('static')
这是我的理解。如果我错了,请纠正我。这就是我问题的重点。
STATIC_URL = '/static/'
这个是不言自明的。它是静态文件的 URL 根目录。
这样我就可以通过浏览器输入http://<ip-or-domain>/static/picture.jpg 来访问我的/static/ 文件夹中的picture.jpg。
但是我和另外两个有一些麻烦。
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
这个参数告诉 Django 我想使用所有名为 static 的文件夹作为静态文件夹,Django 将收集每个文件并使用命令 python3 manage.py collectstatic 将它们放入主静态文件夹中。第一个参数给出了 Django 应该开始搜索的根目录,第二个参数是被标识为应用静态文件夹的文件夹的名称。
STATIC_ROOT = os.path.join('static')
而这个参数是表示收集到的静态文件存放的主要静态文件夹的路径。
我到现在还好吗?
所以这是我的问题。 当我启动服务器时,我的开发服务器上出现此错误,而生产服务器上没有:
错误:
?: (staticfiles.E002) STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置。
这是合乎逻辑的,因为STATICFILES_DIRS 包含主静态文件夹(位于我项目的根目录)。而且这个不能收起来再放文件进去。
但是如果我删除STATICFILES_DIRS,Django 将无法从每个应用程序中收集文件。
如果我删除了STATIC_ROOT,那么一旦collectstatic 完成,我的所有静态文件都将无法被我的应用程序使用。
有什么问题,我可以解决吗?我是不是误会了什么?
我必须用另一个名称重命名我的主要静态文件夹吗?这是一个非常奇怪的解决方案,因为我看到很多 Django 项目仍然使用 static 作为其主要静态文件夹以及应用程序静态文件夹的名称。
无论如何,感谢您帮助 Django 菜鸟。我在 Stackoverflow 上阅读了很多类似的问题,但我仍然不明白我错在哪里。
仅供参考:
Django 3.0.7
Python 3.7
(dev) Ubuntu 20.04 LTS
(prod) Ubuntu 18.04 LTS server
【问题讨论】:
标签: python django django-staticfiles