django :: media, admin and otherwise

Django’s handling of media files such as images, css, etc. has confused me from the very beginning. I’m not going to claim that I fully understand the full ramifications yet, but at least I got something working… hopefully it’ll be helpful for someone. I’m running Django from an Apache 2.0.59 server, and I will be serving media files from the same apache server. The Django documentation suggests that a separate webserver for serving media files will boost performance significantly… which is good, since it gives me something to worry about if I run out of things to do 🙂

I’ve checked out my copy of Django to /home/djangosrc and created a symbolic link in Python’s site-packages directory to /home/djangosrc/django.

My Django server lives in /home/django and I’ve got media files in /home/django/media, and template files in /home/django/templates.

I created a virtual host on Apache and set it up for Django:

[sourcecode language=”xml”]
<VirtualHost 1.2.3.4:80>
ServerName www.mydomain.com
ServerAdmin webmaster@mydomain.com
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE datakortet.settings
PythonPath "[‘/home/django’] + sys.path"
PythonDebug on
</Location>
[/sourcecode]

Then I created a symbolic link from the Apache DocumentRoot directory (htdocs) to the media files for the admin interface: ln -s /home/djangosrc/django/contrib/admin/media htdocs/admin_media. In the settings.py file I put: ADMIN_MEDIA_PREFIX = ‘/admin_media/’ I’m pretty sure this tells Django that it should look for the admin interface media files in http://www.mydomain.com/admin_media/ (the first part of the url coming from the server Django is running on). Continuing the virtual host definition to reflect this I got

[sourcecode language=”xml”]
<Location "/admin_media">
SetHandler none
</Location>
<LocationMatch "\.(jpg|gif|png)$">
SetHandler none
</LocationMatch>
[/sourcecode]

For regular media files I added a symbolic link in Apache’s htdocs directory to my media directory: ln -s /home/django/media htdocs/media, then over in settings.py I added MEDIA_ROOT = ‘/home/django/media’ and MEDIA_URL = ‘http://web.datakortet.no/media’, and finally I could finish off the virtual host definition with:

[sourcecode language=”xml”]
<Location "/media">
SetHandler none
</Location>
</VirtualHost>
[/sourcecode]

So far it seems to be working well. The next project in my queue requires uploading of image files, so I haven’t tested that yet, but hopefully I’m not too far off..

This entry was posted in django. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *