Background:
I’m starting to use Django for the first time, which is also my first foray into web development. I just got stuck on the whole “serving static media” problem. After spending a while looking at all the documentation and StackOverflow questions, I think I understand how it’s supposed to work (i.e. MEDIA_ROOT, MEDIA_URL, updating the urls file, etc).
My Question:
Ok, so here’s the part I’m not sure about. Django applications are supposed to be “pluggable”, i.e. I can move an application from one project to another. So, how should these applications bundle static media?
For example, let’s say I have a “foo” application, which has templates that load some css/image files. Where am I supposed to put these files, so that they’ll automatically get served once I include the application?
The only solution I see, is that installing an application has to include the extra step of copying its static media to some place on your own server that serves that media.
Is this the accepted way to do it? It includes an extra step, but maybe that’s standard when dealing with web-dev (I’m new so I don’t really know).
Also, if this is the way, is there a standard way to collect all my static media to make it easy to know what I need to serve? (I.e., is it standard to have a folder named “media” or something inside the app?).
Thanks,
Convention is to put static media in either media/appname/ or static/appname/ within the app (similar to templates).
For using apps in your project that come with media, I strongly recommend using django-staticfiles. It will automatically serve media (including media within apps) in development through a view that replaces django.views.static.serve, and it comes with a build_static management command that will copy media from all apps into a single directory for serving in production.
Update: django-staticfiles has become part of Django 1.3. It now expects app media to live in a “static/” subdirectory of the app, not “media/”. And the management command is now “collectstatic.”