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}}
by ' / media/', он работает.
2 ответов
models.ImageField
имеет свойство с именем url
который дает вам просматриваемый путь вашего изображения.
вы должны использовать artist.artist_image.url
вместо добавления MEDIA_URL
к вашему имени изображения вручную:
<img class="avatar secondary-content" src="{{artist.artist_image.url}}" />
--
убедится artist_image
не None
, иначе называя .url
выдает исключение.
вам нужно определение 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
]