Этот пример показывает, что обращение к любому ресурсу по URL /static/ вашего сайта (например, http://127.0.0.1:8000/static/images/user.png для девсервера Django), будет перенаправлено в каталог MEDIA_ROOT/static/images, в котором должен находиться файл user.png:
from django.conf import settings
urlpatterns = patterns('',
# ...
(r'^static/(?P.)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
Соответственно, в settings.py должна определяться переменная MEDIA_ROOT как полный путь до каталога.
Лучше это делать так (это кусок settings.py):
import os, sys
def rel(*x):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
DEBUG = True
MEDIA_ROOT = rel('static')
MEDIA_URL = '/static/'
Функция rel() автоматически подставит полный путь.
Почему /static/, а не /images/? Да потому что кроме картинок ещё бывает /static/js/, /static/css/ и ещё много чего. В общем, так удобнее и проверено "лучшими собаководами".
А вот пример urls.py:
urlpatterns = patterns('')
if settings.DEBUG:
urlpatterns += patterns(
'',
# обрабатываем статику самостоятельно
url(r'^static/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
urlpatterns += patterns(
'',
url(r'^admin/', include(admin.site.urls)),
# тут прописываем свои URL
)
Обратите внимание на то, что вывод статики через Django разрешается только в режиме отладки. На боевом сервере этим должен занимать сам веб-сервер, так как у него это получится гораздо эффективнее.
Updated 18 Jan. 2011, 1:55 by RaD.