Konfiguracja statyki w Django opiera się na trzech wpisach w pliku settings.py. Są to definicje zmiennych: MEDIA_URL, MEDIA_ROOT i ADMIN_MEDIA_PREFIX.
Wykorzystanie MEDIA_URL
MEDIA_URL - adres URL, pod którym dostępne będą nasze pliki statyczne. Jest on wykorzystywany przy generowaniu adresów obrazków, arkuszy stylów itp.
Przykładowe ustawienia:
- wartość domyślna:
'' - serwer deweloperski:
MEDIA_URL='/static/ - serwer produkcyjny:
MEDIA_URL='http://static.restlessbeing.pl/media/
Przyjmijmy, że chcemy włączyć jakiś arkusz stylów do naszej strony html. W Django zrobimy to wpisując do szablonu strony:
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/960/960.css" />
Jeśli ustawiliśmy MEDIA_URL na wartość: http://static.restless.being.pl/media/ to w kodzie naszej strony znajdzie się adres w postaci: http://static.restless.being.pl/media/css/960/960.css.
Proste, prawda?
Dociekliwy jednak zapyta - jak to się stało, że zmienna MEDIA_URL nagle pojawia się w szablonie? Odpowiedzią na to pytanie jest context processor django.core.context_processors.media, który umieszcza w kontekście szablonu tę zmienną, a który mamy domyślnie włączony. Oto jego kod:
def media(request): """ Adds media-related context variables to the context. """ return {'MEDIA_URL': settings.MEDIA_URL}
Podsumowując: MEDIA_URL odpowiada za adres, pod którym przeglądarka będzie szukała plików statycznych. Pozostaje więc tylko powiedzieć o tym naszemu serwerowi.
Konfiguracja statyki na serwerze deweloperskim
W przypadku serwera developerskiego mozemy serwować statykę korzystając z wbudowanego widoku django.views.static.serve. W tym celu wpisujemy w urls.py:
if settings.DEBUG: urlpatterns += patterns("django.views", url(r"^static/(?P<path>.*)", "static.serve", { "document_root": '/katalog/ze/statyka/', }) )
Oznacza to tyle, że jeśli mamy:
MEDIA_URL='/static/',document_rootustawiony na '/var/www/projekt1/site_media/`,
a w przeglądarce podamy adres: http://localhost:8000/static/css/960/960.css to w systemie plików szukany będzie plik: /var/www/projekt1/site_media/css/960/960.css.
Konfiguracja statyki na serwerze produkcyjnym
W przypadku serwera produkcyjnego, na przykład Apache czy Nginx, musimy go tak skonfigurować aby pod adresem wpisanym w MEDIA_URL (np. http://static.restlessbeing.pl/media/) dostępne były nasze pliki statyczne.
Wykorzystanie ADMIN_MEDIA_PREFIX
ADMIN_MEDIA_PREFIX - adres URL, pod którym dostępne będą pliki statyczne dla Panelu Administracyjnego Django. Jest to właściwie odpowiednik MEDIA_URL, tyle, że wykorzystywany w kontekście Panelu Administracyjnego.
Przykładowe ustawienia:
- wartość domyślna: '/media/'
- serwer deweloperski: '/media/'
- serwer produkcyjny: ADMIN_MEDIA_PREFIX='http://static.restlessbeing.pl/admin/
W przypadku serwera deweloperskiego serwowanie statyki dla Panelu Administracyjnego działa samo z siebie. Natomiast, aby statyka dla Panelu Administracyjnego była prawidłowo serwowana na serwerze innym niż deweloperski, musimy zmapować adres podany w ADMIN_MEDIA_PREFIX na folder w systemie plików, analogicznie jak w przypadku MEDIA_URL. Pliki statyczne Panelu Administracyjnego znajdują się w katalogu: django/contrib/admin/media.
Wykorzystanie MEDIA_ROOT
MEDIA_ROOT - ścieżka w systemie plików, w której znajdują się pliki ze statycznymi danymi. MEDIA_ROOT wskazuje folder, do którego będą trafiały pliki wrzucane przez użytkowników, a to dlatego, że stanowi bazową ścieżkę dla parametru 'upload_to' pól FileField i ImageField.
Przykładowe ustawienia:
MEDIA_ROOT=/var/www/projekt1/site_media/
Warto pamiętać, że bardzo często w aplikacjach MEDIA_ROOT jest wykorzystywany jako domyślna lokalizacja nie tylko dla plików wrzucanych przez użytkowników ale i dla całej statyki. W ten sposób korzysta z tej zmiennej na przykład django-compress.


2009-11-23 at 16:16 from http://lukaszmowi.wordpress.com/2009/11/23/o-media_url-w-django/