Если вы можете просматривать файлы, нажимая URL-адрес непосредственно в браузере, то я думаю, что вы неправильно установили MEDIA_URL
настройки или что-то не так в коде вашего шаблона. На какой URL ссылается ваш HTML для ваших CSS / JS / Images?
Убедитесь, что вы проходите через MEDIA_URL
, чтобы он был доступен в контексте вашего шаблона, что вы делаете, заключая запрос, передаваемый вашим функциям представления, в RequestContext
, например:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Если вы правильно установили MEDIA_URL
и правильно используете мультимедиа (о чем говорит ваш вопрос), вы сможете получить доступ к мультимедиа, используя такие вещи, как:
<img src="{{ MEDIA_URL }}relative/path/to/media.jpg" alt="Foobar" />
После редактирования отобразить код шаблона:
Судя по вашему шаблонному коду, вы пытаетесь ссылаться на файлы с корнем в переменной шаблона с именем site_media
, которая, вероятно, не существует.
Вам нужно поместить что-то подобное в ваш settings.py
:
MEDIA_URL = u'/site_media/'
Затем измените код вашего шаблона на что-то вроде этого:
<img src="{{ MEDIA_URL }}images/calendar.png">
и убедитесь, что вы передаете MEDIA_URL
в шаблон из функции просмотра.
После комментария с просьбой дать разъяснения по поводу RequestContext
:
В онлайновой книге по Django есть несколько полезных (хотя в настоящее время не хватает некоторых частей) документации о RequestContext
. Лично я использую декоратор render_to
от django-раздражает, чтобы не думать об этом. Вместо моего более раннего примера кода представления вы можете просто сделать это:
from annoying import render_to
@render_to('my_template.html')
def some_view(request):
...
return my_data_dictionary
По сути, вы просто декорируете свою функцию представления, передавая шаблон, который вы хотите визуализировать, а затем просто возвращаете dict
, содержащий дополнительные переменные контекста, которые вы хотите установить (т.е. переменные контекста в дополнение к тем, которые установлены для вас RequestContext
, например MEDIA_URL
).
Этот подход, очевидно, не работает, если ваше представление может использовать разные шаблоны в зависимости от некоторых условий, но есть простые способы:
def some_view(request, some_var):
...
if some_var:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
else:
return render_to_response('my_other_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Можно переписать как:
def some_view(request, some_var):
...
if some_var:
return _some_private_view(request, my_data_dictionary)
else:
return _some_other_private_view(request, my_data_dictionary)
@render_to('my_template.html')
def _some_private_view(request, my_data_dictionary):
return my_data_dictionary
@render_to('my_other_template.html')
def _some_private_view(request, my_data_dictionary):
return my_data_dictionary
Что кажется мне более понятным, по крайней мере.