【发布时间】:2020-02-19 18:49:14
【问题描述】:
我正在尝试使用 DEBUG=False 运行应用程序
下面是我的设置文件配置
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static/")]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
运行python manage.py collectstatic后,将app路径下的所有静态文件复制到staticfiles目录下(STATIC_ROOT路径中提到)。
加载网页时,静态文件加载失败。
错误信息:
GET /static/dist/bootstrap-4.0.0-dist/js/bootstrap.min.14d449eb8876.js HTTP/1.1" 404 77
GET /静态/dist/bootstrap-select/js/bootstrap-select.min.31f649694651.js HTTP/1.1" 404 77
GET /静态/js/base.1332bbb46ac5.js HTTP/1.1" 404 77
GET /静态/crsummary/dist/amcharts4/core.ea1ec0eb6727.js HTTP/1.1" 404 77
查看错误消息,应用程序正在尝试从路径/static/\*/\* 加载bootstrap.min.14d449eb8876.js,但实际文件位置是staticfiles/\*/\*
我不确定我在这里错过了什么配置。
【问题讨论】:
-
您使用的是哪个网络服务器? Nginx 还是 Apache?如果您可以提供网络服务器的配置,它会有所帮助
-
不生产时静态文件在哪里?它们不在名为
static/的文件夹中吗?python manage.py collectstatic只是将所有静态文件放入一个文件夹(在您的情况下为staticfiles/),但这并不意味着它们将从那里得到服务。正如@ToanQuocHo 所问,您使用的是哪个服务器? -
我没有使用任何像 Apache 这样的外部 Web 服务器,但我尝试使用开发服务器本身(由 Django 提供)来测试 DEBUG=False 是否有效。我在 ALLOWED_HOST 中给出了我的计算机的 IP 地址。如果我们在生产中部署 Django 时不使用任何外部 Web 服务器,是否会出现此错误?
-
它不会按您的预期工作,并且在使用
runserver命令运行时对您的应用非常不利。如果您仍然想遵循这种方式,请确保您的urls.py上的静态 url 配置没有留在if settings.DEBUG:条件块内。但我真的不建议你尝试这个。 -
我认为在runserver中运行时必须设置DEBUG=True。请阅读docs.djangoproject.com/en/2.2/howto/static-files
标签: python django django-staticfiles