【问题标题】:I don't really understand how STATICFILES_DIRS and STATIC_ROOT Django settings works我真的不明白 STATICFILES_DIRS 和 STATIC_ROOT Django 设置是如何工作的
【发布时间】: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


    【解决方案1】:

    分别选择

    STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) #no slash
    
    STATICFILES_ROOT = os.path.join(BASE_DIR, "static_cdn")
    

    https://stackoverflow.com/a/8690002/1388866 阅读此内容。

    【讨论】:

    • 这是什么意思?给我的 STATICFILES_ROOT 一个不同于 'static' 的名称?是的,里面没有斜线。这是我写问题时的一个错字。我将对其进行编辑。
    • Django 将收集不同文件夹中的文件。
    • 我想我知道是因为你的链接。谢谢。
    猜你喜欢
    • 2018-08-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多