【问题标题】:Django static files not working on HerokuDjango 静态文件在 Heroku 上不起作用
【发布时间】:2023-04-08 22:26:01
【问题描述】:

我的 django 应用程序在本地服务器上运行良好。但是,当我在 Heroku 上部署它时,没有提供静态文件(出现 404 错误)。请帮忙!

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns('',
       url(r'^$', 'product.views.home', name='home'),
       url(r'^admin/', include(admin.site.urls)),

   )
if settings.DEBUG:
       urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
       urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

静态文件设置:

  TEMPLATE_DIRS = (
      os.path.join(BASE_DIR, 'templates'),
  )

  STATIC_URL = '/static/'

  MEDIA_URL = '/media/'

  MEDIA_ROOT = os.path.join(BASE_DIR, "static", "media")

  STATIC_ROOT = os.path.join(BASE_DIR, "static", "static_root")

  STATICFILES_DIRS = (
      os.path.join(BASE_DIR, "static", "static_dirs"),
  )

WSGI 文件 -

  import os
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "acton.settings")

  from django.core.wsgi import get_wsgi_application
  application = get_wsgi_application()

  try:
      from dj_static import Cling
      application = Cling(get_wsgi_application())

  except:
      pass

【问题讨论】:

    标签: python django heroku


    【解决方案1】:


    这是我在 Heroku 上部署静态文件的设置。

    希望对您有所帮助:

    导入操作系统
    BASE_DIR = os.path.dirname(os.path.abspath(文件))
    STATIC_ROOT = '静态文件'
    STATIC_URL ='/静态/'
    MEDIA_ROOT = os.path.join(PROJECT_PATH, "媒体")
    MEDIA_URL = "/媒体/"
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    )

    【讨论】:

    • 仍然有同样的问题!
    • 您能否判断您在部署时是否遇到任何错误,在您的终端上运行 python manage.py collectstatic 命令?
    • 不,当我运行 'heroku run python manage.py collectstatic' - 我没有看到任何错误,静态文件被收集。奇怪的是heroku上管理员的css文件正在工作。它只是我遇到问题的前端。
    • 将您的 STATIC_ROOT='staticfiles' 更改为我编写的设置。我没有其他办法看到那里的问题。因为 collectstatic 会收集项目根目录中“staticfiles”文件夹中的所有文件。 STATIC_URL 是您访问它们的路径。
    • 我完全删除了 Heroku 应用程序并从头开始重新部署。它现在工作!谢谢你的建议。
    【解决方案2】:

    你的setting.py文件配置不正确。静态和媒体文件应该是

    STATICFILES_DIRS = os.path.join(BASE_DIR, 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    

    【讨论】:

    • 使用我的 settings.py ,静态文件在开发服务器上运行良好。它仅在我遇到问题的 Heroku 生产服务器上。现在,当我根据您的建议更改 settings.py 时,我的静态文件无法在开发服务器上运行!
    • 我检查了所有这些问题并尝试了他们的建议,但没有成功。 Heroku 上已成功收集静态文件,但未显示。
    • 您在 HTML 模板中为静态文件提供的路径是什么?
    【解决方案3】:

    对于遇到此问题的其他任何人,对我来说,我的 wsgi.py 文件中缺少白噪声配置。

    我的wsgi.py 文件中特别缺少以下内容:

    from whitenoise.django import DjangoWhiteNoise application = DjangoWhiteNoise(application)

    文档在这里:http://whitenoise.evans.io/en/stable/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-20
      • 2012-08-16
      • 1970-01-01
      • 2014-02-04
      • 2012-01-14
      • 2012-12-03
      • 2015-11-09
      • 2015-07-09
      相关资源
      最近更新 更多