ReRed
ReRed

Reputation: 373

Deployed Django project does not load static files

I have just deployed (first time ever) a Django project to a web server. Everything (including postgres) works flawlessly, except that static images won't load.

Here is the relevant part of the settings.py:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

#STATICFILES_DIRS = [
#    os.path.join(BASE_DIR, "static"),
#]

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

LOGIN_REDIRECT_URL = 'home'
LOGIN_URL = 'login'
LOGOUT_URL = 'logout'

AUTH_USER_MODEL = 'account.CustomUser'

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

The error message I get is the following in the console:

"GET /static/images/logo.png HTTP/1.1" 404 1808

However, when checking the file path in the console I have the following:

root@melius:/django/melius/static/images# 

In this folder the files are present. Where is my mistake?

Upvotes: 0

Views: 1132

Answers (1)

user12065892
user12065892

Reputation:

There can be two reaon your static files not working.

First of all, Django doesn't serve static files on production.

Also i notice your static settings are wrongly configured.

Make sure your setting.py is look like this:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'YOUR STATIC FILE FOLDERS')]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

If you run your application on Nginx or apache2please make sure you configured the.conf` file properly to serve the static files.

Also, there is a straightforward and easy solution, that is whitenoise

If you don't want to serve your static files with Nginx or a similar server.

You can try whitenoise

To use whitenoise, please install it first and update your settings.py file like this:

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

and add this in middlware before the sessionmiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # Serve static in production without nginx or apache
    'django.contrib.sessions.middleware.SessionMiddleware',
    ........
]

Hope the solution will solve your problem

Here you go for whitenoise docs: http://whitenoise.evans.io/en/stable/

Note: static root and static dirs shound't be same

Upvotes: 1

Related Questions