ImproperlyConfigured at / Empty static prefix not permitted - Django
Solution 1
I added the same line in my urls.py and got the same error as you.
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
The documentation here says to use settings.STATIC_URL
and settings.STATIC_ROOT
I changed it to the documentation version
urlpatterns = patterns('',
....urls......
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
and the error went away!
I checked my settings file and made sure settings.MEDIA_URL
and settings.MEDIA_ROOT
were both defined correctly. Later I adjusted urls.py back to using settings.MEDIA_URL
and settings.MEDIA_ROOT
. Everything worked as expected.
These are the relevant parts of my settings.py file:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
REPOSITORY_ROOT = os.path.dirname(BASE_DIR)
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(REPOSITORY_ROOT, 'static/')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(REPOSITORY_ROOT, 'media/')
I think MEDIA_URL
was set incorrectly
Solution 2
You have too check both of the MEDIA_URL and MEDIA_ROOT as well as for static files STATIC_ROOT STATIC_URL are defined correctly.
Check correct spelling also :)
If one of them is miss configured those will cause this error.
Solution 3
To resolve the problem, the following statements must be added to the settings.py file:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
Solution 4
Make sure that settings.py has:
# Media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
Then in the urls.py, try this
urlpatterns[
...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
Solution 5
I am following Django 2.2 & Python | The Ultimate Web Development Bootcamp my issue was that I have forgot to declare these to portfolio-project/portfolio/settings.py/ to the bottom area:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/Media/'
Related videos on Youtube
Daniel Scott
Updated on July 09, 2022Comments
-
Daniel Scott almost 2 years
I'm working on uploading/displaying images with Django.
The website is deployed on Heroku.
Following this tutorial I was able to successfully upload images.
However, the images weren't being displayed in the template.
I then learned that my urls.py should have this line at the end:
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
I added this to the end of my urls.py but now I'm getting this error:
ImproperlyConfigured at / Empty static prefix not permitted
I have MEDIA_URL and MEDIA_ROOT in my settings.py and neither are empty.
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash. # Examples: "http://example.com/media/", "http://media.example.com/" MEDIA_URL = '/media/'
Why is this error happening and how would I fix it?
Here's what I think is the relevant part of my urls.py:
from django.contrib import admin from django.conf import settings from django.conf.urls.static import static import notifications admin.autodiscover() urlpatterns = patterns('', ....urls...... ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-
rnevius almost 10 years...what is your
MEDIA_URL
andMEDIA_ROOT
? You said they're defined; but what are they? -
Daniel Scott almost 10 yearsI updated the question.
-
rnevius almost 10 years
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
is for development only, and only works withdebug
set toTrue
. docs.djangoproject.com/en/dev/howto/static-files/…
-
-
Adrian Grzywaczewski about 6 yearsThanks, Devin! For me, it was clearly the fault of the missing MEDIA_ROOT. url patterns can still be inside square brackets.
-
Selaron over 5 yearsWelcome to SO and thank you for contributing. It would help others and the OP understanding your solution if you'd add more specific explanations (e.g. background information, what does it do, why does it help with the given problem).