Heroku static files not loading, Django

前端 未结 5 476
春和景丽
春和景丽 2021-01-03 14:43

I\'m trying to push my Django project to Heroku, but it isn\'t loading the staticfiles.

I used this to setup the things, everything is fine but I\'m not able to fix

相关标签:
5条回答
  • 2021-01-03 15:29

    Your STATICFILES_DIRS setting is wrong. It should be pointing to the actual location of the "static" directory containing the files:

    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    
    0 讨论(0)
  • 2021-01-03 15:38

    It looks like django don't know where your static_root is. This folder is autogenerated when you fire manage.py collectstatic Make sure that the folders static and templates are inside your django app. You didn't created a django app to put this folders into. You created a django project the next step is to create a django app with something like this python manage.py startapp polls

    # Absolute filesystem path to the Django project directory:
    DJANGO_ROOT = dirname(dirname(abspath(__file__)))
    # Absolute filesystem path to the top-level project folder:
    SITE_ROOT = dirname(DJANGO_ROOT)
    
    STATIC_URL = '/static/'
    STATIC_ROOT = normpath(join(SITE_ROOT, 'static_root'))
    
    0 讨论(0)
  • 2021-01-03 15:39

    Your urls.py file lacks the setting to manage and route requests for static resources.

    in order to provide access to static resorces you must add to urlpatterns of urls.py:

    urlpatterns += patterns('',
            (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
        )
    
    0 讨论(0)
  • 2021-01-03 15:40

    I have been dealing with the same problem too. And here are the 2 things that I changed in my code.

    (I'm using Django 1.7)

    1) settings.py

    I add these lines to the setting files

    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,  'templates'),
        # Add to this list all the locations containing your static files 
    )
    

    STATIC_ROOT: this tells Django where to (a) put the static files when you run python manage.py collectstatic and (b) find the static files when you run the application

    TEMPLATE_DIRS: this tells Django where to look for your static files when it search for statics files when you run python manage.py collectstatic

    2) wsgi.py

    Originally my file was:

    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xxxx.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    

    And I changed it to:

    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xxxx.settings")
    
    from django.core.wsgi import get_wsgi_application
    from whitenoise.django import DjangoWhiteNoise
    application = get_wsgi_application()
    application = DjangoWhiteNoise(application)
    

    Read here for more information on whitenoise: https://devcenter.heroku.com/articles/django-assets#whitenoise


    Also, remember to install whitenoise: pip install whitenoise==2.0.6

    Before deploying the project, run: python manage.py collectstatic

    This will create a folder indicated by STATIC_ROOT (declared in your settings.py), containing all your static files.

    0 讨论(0)
  • 2021-01-03 15:44
    pip install whitenoise    
    

    Add whitenoise to requirement.txt. Follow the steps in https://devcenter.heroku.com/articles/django-assets

    0 讨论(0)
提交回复
热议问题