static.serve(request, path, document_root, show_indexes=False)
There may be files other than your project’s static assets that, for convenience, you’d like to have Django serve for you in local development. The serve()
view can be used to serve any directory you give it. (This view is not hardened for production use and should be used only as a development aid; you should serve these files in production using a real front-end web server).
The most likely example is user-uploaded content in MEDIA_ROOT
. django.contrib.staticfiles
is intended for static assets and has no built-in handling for user-uploaded files, but you can have Django serve your MEDIA_ROOT
by appending something like this to your URLconf:
from django.conf import settings from django.views.static import serve # ... the rest of your URLconf goes here ... if settings.DEBUG: urlpatterns += [ url(r'^media/(?P<path>.*)$', serve, { 'document_root': settings.MEDIA_ROOT, }), ]
Note, the snippet assumes your MEDIA_URL
has a value of '/media/'
. This will call the serve()
view, passing in the path from the URLconf and the (required) document_root
parameter.
Since it can become a bit cumbersome to define this URL pattern, Django ships with a small URL helper function static()
that takes as parameters the prefix such as MEDIA_URL
and a dotted path to a view, such as 'django.views.static.serve'
. Any other function parameter will be transparently passed to the view.
Please login to continue.