当 django 正在寻找静态文件时,我不断收到 404 错误

I keep getting a 404 error when django is looking for static files

当 django 寻找静态文件时,我总是收到 404 错误。

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, 'business', 'static_cdn')
STATIC_URL = '/static_cdn/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'business', 'static'),
]

app的项目树结构

- business
-- migrations
--- ....
-- static_cdn
--- business
---- main.css
---- scripts.js
-- templates
--- business
---- base.html
---- home.html
-- templatetags
--- ...
-- __init__.py
-- admin.py
-- apps.py
-- models.py
-- tests.py
-- urls.py
-- views.py

错误

[29/Jul/2019 13:09:45] "GET / HTTP/1.1" 200 12670
[29/Jul/2019 13:09:45] "GET /static_cdn/business/main.css HTTP/1.1" 404 77
[29/Jul/2019 13:09:45] "GET /static_cdn/business/scripts.js HTTP/1.1" 404 77

我也 link 到像 {% static 'business/main.css' %} 这样的静态文件,我的文档顶部确实有 {% load static %}

为什么 django 找不到静态文件?该错误表明它正在寻找正确的位置,但它返回 404 错误。

如果还有什么需要可以看我的code

注: 我认为 django 无法 read 这个文件,但我不知道为什么...... Collectstatic 把所有 static_cdn/进入同一应用程序目录中的 static/

将您的静态文件夹重命名为 static_cdn 并更新 settings.py

settings.py

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn')
STATIC_URL = '/static_cdn/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_cdn'),
]

即这个结构:

app的项目树结构

- business
-- migrations
--- ....
-- static_cdn
--- business
---- main.css
---- scripts.js
-- templates
--- business
---- base.html
---- home.html
-- templatetags
--- ...
-- __init__.py
-- admin.py
-- apps.py
-- models.py
-- tests.py
-- urls.py
-- views.py

在您的代码中,您定义了 BASE_DIR 如下

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

这意味着它指向根文件夹,而您的 static_cdn 文件夹位于 business 文件夹

在下面定义时,您必须将 STATIC_ROOTSTATICFILES_DIRS[=25 的业务文件夹中的路径更新为=]

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn')
STATIC_URL = '/static_cdn/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_cdn'),
]

如下

STATIC_ROOT = os.path.join(BASE_DIR, 'business', 'static')
STATIC_URL = '/static_cdn/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'business', 'static_cdn'),
]

您可能已将 DEBUG 设置为 False。当且仅当您在开发环境中时,将 DEBUG 设置为 True。如果您计划进行生产,请先执行 collectstatic 并在 settings.py 中进行适当的更改并将 DEBUG 设置回 False。请参阅 Django 文档和您的生产服务器文档。也不要忘记重新启动服务器。 祝福。