[Fixed]-Django media files not showing with Debug = False on production โ€“ Django 1.10

11๐Ÿ‘

โœ…

You shouldnโ€™t use collectstatic for your media directory. Remove '/home/admin/webapps/mainfolder/mainapp/media' from STATICFILES_DIRS, then set

MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'

Once youโ€™ve done this, the static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) should serve media files when DEBUG = True.

For DEBUG = False, you have to configure Apache to serve the media files.

๐Ÿ‘คAlasdair

26๐Ÿ‘

In your urls.py file:

add this line

from django.views.static import serve

add those two urls in urlpatterns:

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),

It worked for me ๐Ÿ™‚

๐Ÿ‘คstathoula

9๐Ÿ‘

If you are using Nginx, let it to serve media files

For Example

go to nginx/sites-available & add this

location /media/ { root */home/myprojectdir/myproject*; } 
๐Ÿ‘คer23

6๐Ÿ‘

I have faced the same issue with DEBUG=False. I solved it by configuring Nginx media location in the server block like this

location /media/ {
    root FULL_PATH_TO_APP; 
}

FULL_PATH_TO_APP is the full path to the directory where my media folder exists.

๐Ÿ‘คMahbubur Rahman

3๐Ÿ‘

In Pythonanywhere server
Just
add Static file url and Directory

URL
/static/
/media/

Directory path

/home/taukir707/myblog/static

/home/taukir707/myblog/media

0๐Ÿ‘

This is the best solution. Keep you media folder inside your static folder. And use this code in

Settings.py

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
if(DEBUG==True):
    STATIC_URL = '/static/'
    MEDIA_URL = '/static/media/'
    STATICFILES_DIRS=[
         os.path.join(BASE_DIR,'static')
    ]
    STATIC_ROOT='/home/username/websitedomain/static'
    MEDIA_ROOT='/home/username/websitedomain/static/media'
else:
    STATIC_URL = '/static/'
    MEDIA_URL='static/media/'
    STATIC_ROOT=os.path.join(BASE_DIR,'static')
    MEDIA_ROOT=os.path.join(BASE_DIR,'static/media/')
๐Ÿ‘คREVANTH N D

0๐Ÿ‘

this helps me a lot

settings.py

STATIC_URL = '/static/'


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


MEDIA_URL =  '/media/'


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


STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'


INSTALLED_APPS = [
 
    'django.contrib.staticfiles',

    'whitenoise.runserver_nostatic',

]

in url.py import URL and give static and media file URL

from django.views.static import serve

from django.conf.urls import url
๐Ÿ‘คArun Kumar

0๐Ÿ‘

  1. In settings.py:
    DEBUG = False

  2. In urls.py :

if not settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. $> python manage.py runserver

Work fine in deployment or development!

๐Ÿ‘คManuelP

0๐Ÿ‘

devserver in secure mode

Step 1

Define a STATIC_ROOT and MEDIA_ROOT path in settings.py.

Code: settings.py

            STATIC_URL = '/static/'

            MEDIA_URL = '/media/'



            if DEBUG:

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

            else:

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

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

Step 2

Code: urls.py

            from django.conf.urls import url
            from django.conf import settings
            from django.views.static import serve

            urlpatterns = [
                  url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
                  url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
            ]
            

Then run py manage.py runserver

0๐Ÿ‘

Need to change Ngingx to add location:

location /media/ {
   alias /home/xuser/xproject/media/;
   expires 1d;
}
๐Ÿ‘คuser21234776

Leave a comment