| 1 | To take advantage of the MEDIA_URL in the settings.py file for hosting your static media on a separate server, you need to do a |
| 2 | little internal work on your templates and some work to make that setting available to the templates. |
| 3 | |
| 4 | Inside a template, where you would normally have: |
| 5 | |
| 6 | {{{ |
| 7 | blah blah <img src="/img/foo.jpg" alt="this is a foo"> blah blah.. |
| 8 | }}} |
| 9 | |
| 10 | You would instead insert {{media_url}} so that it would look like: |
| 11 | |
| 12 | {{{ |
| 13 | blah blah <img src="{{media_url}}/img/foo.jpg" alt="this is a foo"> blah blah.. |
| 14 | }}} |
| 15 | |
| 16 | It generally requires a big search and replace the first time you implement it. After that, seeing other |
| 17 | references in the templates has been enough to remind me to use {{media_url}} before any static content. |
| 18 | |
| 19 | We could pass {{media_url}} in through each view, but since we'll want it throughout the site, it's often easier to |
| 20 | set up a simple context processor to do the heavy lifting. |
| 21 | |
| 22 | Here's a example snippet from a context process: |
| 23 | |
| 24 | {{{ |
| 25 | from myproject import constants |
| 26 | from django.conf import settings |
| 27 | |
| 28 | def common(request): |
| 29 | ctx = {} |
| 30 | ctx['constants'] = constants |
| 31 | ctx['media_url'] = settings.MEDIA_URL |
| 32 | ... more stuff here ... |
| 33 | return ctx |
| 34 | }}} |
| 35 | |
| 36 | Then in the settings.py under TEMPLATE_CONTEXT_PROCESSORS, we added: |
| 37 | "myproject.context_processors.common", |
| 38 | |
| 39 | and from there, the MEDIA_URL in settings.py became available in all templates as {{media_url}}. |