Django: MEDIA_URL не установлен в шаблоне

Я прочитал много вопросов и статей, но не могу найти то, что мне не хватает.

Вот мой conf:

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__),'static').replace('\\', '/'),
)

urls.py

urlpatterns = [
    url(r'^$', include('home.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^artist/', include('artists.urls')),
    url(r'photo/', include('photo.urls'))
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Как бы то ни было, мои средства массовой информации обслуживаются, потому что, когда я перехожу на http://localhost:8000/media/path/to/image.jpg, у меня есть мое изображение.

Но когда в шаблоне я иду так:

<img class="avatar secondary-content" src="{{MEDIA_URL}}{{artist.artist_image}}">

У меня есть только путь к изображению. Когда я изменяю html {{MEDIA_URL}} на '/media/', он работает.

Итак, мой MEDIA_URL не установлен в шаблоне, и, насколько я искал, я не вижу, что я пропустил.

Я на django 1.8.2. Если вам нужна информация, просто спросите меня.

+7
источник поделиться
2 ответа

models.ImageField имеет свойство url, которое дает вам путь к просмотру вашего изображения.

Вы должны использовать artist.artist_image.url вместо добавления MEDIA_URL к имени изображения вручную:

<img class="avatar secondary-content" src="{{artist.artist_image.url}}" />

-

Убедитесь, что artist_image не None, иначе вызов .url вызывает исключение.

+11
источник

Вам нужно определить django.template.context_processors.media контекстный процессор шаблона в ваших настройках для переменной MEDIA_URL, которая будет присутствовать в контексте шаблона,

Если этот процессор включен, каждый RequestContext будет содержать переменная MEDIA_URL, обеспечивающая значение параметра MEDIA_URL.

Включение этого в ваш settings будет включать MEDIA_URL в контексте шаблона. Он не включен по умолчанию в настройках Django 1.8. Нам нужно установить его явно.

context_processors = [
    ...
    'django.template.context_processors.media', # set this explicitly
]
+11
источник

Посмотрите другие вопросы по меткам или Задайте вопрос