Heroku 静态文件不适用于 django admin + 找不到文件 + 404

Adi*_*lik 2 django heroku django-admin

我的网站部署在 Heroku 上。除了静态文件,一切都很好。静态文件在此路径上doctor_app/doctor_app/static/

在本地,django 的管理面板运行良好。但是在heroku上,它没有找到任何静态文件。

令人惊讶的是,当我使用终端运行此命令时。

heroku run cat doctor_app/static/admin/css/base.css
Run Code Online (Sandbox Code Playgroud)

它输出 的内容base.css。这意味着静态文件在那里

我想知道为什么 django 找不到任何文件?

欲了解更多信息,这是我的 settings.py

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

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
#STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'staticfiles'),
)

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

Sol*_*ong 5

这不是 Django 错误。Django 所做的是准备好静态文件并将它们收集到STATIC_ROOT.

请注意,为 Django 项目提供静态文件通常不在其职责范围内。您可以参考Django 的关于部署静态文件的文档,并尝试使用uwsgi或 之类的应用程序部署它们nginx

对于一个快速的尝试,您可以将静态文件放到Django的路由,描述在这里

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)

就您的问题所提供的而言,这可能对您有用。