在Heroku中设置静态文件不适用于Django

时间:2019-05-10 04:51:51

标签: django python-3.x heroku

我正在Heroku中使用Django 2.2设置一个Web应用程序,并且能够在生产环境中成功部署它,但是每次尝试运行heroku local web时,该应用程序都不会在本地加载css文件。

这是我在Django应用中设置文件配置的方式。

- src
  - live-static
       - media-root
       - static-root         
  - main_app
       - urls.py
       - wsgi.py
       - __init__.py
       - settings
           - __init__.py
           - base.py
           - local.py
           - production.py
  - pages
        - __init__.py
        - admin.py
        - apps.py
        - models.py
        - tests.py
        - views.py
        - templates
           - main_app
             - home.html    
  - templates
       - base.html
  - static
       - main_app
           - css
             -cover.css
           - img
             -myimage.jpg
       - admin
           - css
           - img
           - js

以下代码是生产文件和本地文件中的配置的摘录:

production.py

STATIC_URL = '/static/'

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

STATIC_ROOT = os.path.join(BASE_DIR, 'live-static', 'static-root')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'


local.py


STATIC_URL = '/static/'

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

STATIC_ROOT = os.path.join(BASE_DIR, 'live-static', 'static-root')

我的css和jpg文件不在本地渲染,但是在生产环境中渲染。

base.html
{% load static %}


 <link href="{% static 'main_app/css/cover.css' %}" rel="stylesheet">
 <img src="{% static 'main_app/img/myimage.jpg' %}" >

我希望当我运行heroku local web时,我应该能够看到渲染的CSS和图像。

2 个答案:

答案 0 :(得分:0)

我不确定这个问题的答案。但是,为什么不尝试输入heroku local:run python manage.py collectstatic,看看它是否呈现您的页面。

很抱歉将其发布为答案而不是评论(没有很高的代表)。

答案 1 :(得分:0)

我发现local.py文件缺少中间件whitenoise.middleware.WhiteNoiseMiddleware,该中间件对于在Django中可视化静态文件是必需的。