Это длинный пост, в котором кратко изложены все, что я узнал о Django, чтобы заставить работать статические файлы (мне потребовалось некоторое время, чтобы понять, как все разные части сочетаются друг с другом).
Чтобы разместить статические изображения на вашем сервере разработки (а затем и на реальном сервере), вам нужно будет сделать несколько вещей (обратите внимание, в частности, на третий и четвертый этапы):
Набор MEDIA_ROOT
MEDIA_ROOT - это константа, которая сообщает Django физический путь к файлу (в вашей файловой системе). Используя ваш пример, MEDIA_ROOT должен быть установлен в «C: / siteURL / galleries /», как вы написали. MEDIA_ROOT будет использоваться в одном из следующих шагов, поэтому мы установили его.
Установить MEDIA_URL
MEDIA_URL - это URL-адрес, на котором располагаются ваши изображения. Другими словами, всякий раз, когда вы хотите получить изображение, URL для поиска начинается с MEDIA_URL. Обычно это , а не , начинающееся с «http», поскольку вы работаете со своего собственного сервера (мой MEDIA_URL обычно имеет значение «/ site_media /», что означает запуск с корневого домена, затем перейдите на site_media и т. д.)
Использовать MEDIA_URL
MEDIA_URL не работает по волшебству, вам действительно нужно его использовать. Например, когда вы пишете HTML, который получает файл, он должен выглядеть следующим образом:
<li><img src="{{MEDIA_URL}}/160.jpg" /></li>
Посмотрите, как я говорю шаблону использовать префикс MEDIA_URL? Это в конечном итоге переводится как 'http://some-good-URL/galleries/160.jpg'
.
Обратите внимание, что для того, чтобы реально использовать MEDIA_URL в ваших шаблонах, вам нужно добавить строку 'django.core.context_processors.media'
к вашему TEMPLATE_CONTEXT_PROCESSORS
параметру в вашем файле settings.py, если я не ошибаюсь.
Заставьте ваш сервер dev обслуживать статические файлы
В реальной среде вы будете настраивать файлы с такими адресами, как «static_media», чтобы они обслуживались без прохождения через Django. Но в среде разработчиков вы также захотите обслужить их из Django, поэтому вам следует добавить эту общую строку в конец вашего файла urls.py:
if settings.DEBUG:
# Serve static files in debug.
urlpatterns += patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT,
'show_indexes' : True}),
)
Обратите внимание, что это берет что-либо с URL-адресом "site_media / *" (который на самом деле является моим MEDIA_URL) и подает его из моей папки MEDIA_ROOT, где находится параметр MEDIA_ROOT.
Конечная нота
Что меня смутило, так это то, что многое здесь для удобства. Например, MEDIA_ROOT используется только в вашем шаблоне URL отладки, чтобы сообщить Django, откуда загружаться. И MEDIA_URL только для того, чтобы побудить вас не вводить абсолютные URL-адреса во все ваши HTML-файлы, потому что тогда, когда вы решите переместить файлы на другой сервер, вам придется вручную изменить их все (вместо того, чтобы просто изменить MEDIA_URL константа).
Конечно, ничего из этого не требуется: вы можете жестко закодировать шаблон отладочной ссылки с вашей собственной папкой, убедиться, что статические файлы действительно являются сервером с URL-адреса (посетив его в браузере), а затем код, который без с использованием параметра MEDIA_URL в HTML-файл, просто чтобы убедиться, что все работает.