我读过很多问题和文章,但找不到我错过的内容。
这是我的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}}">
我只有图像路径。当我用'/ media /'更改html {{MEDIA_URL}}
时,它可以正常工作。
所以我的MEDIA_URL
似乎没有设置在模板中,就我搜索而言,我看不到我错过的内容。
我在django 1.8.2上。如果您需要任何信息,请问我。
答案 0 :(得分:14)
您需要在MEDIA_URL
变量的设置中定义django.template.context_processors.media
模板上下文处理器才能出现在模板上下文中。
如果启用此处理器,则每个
RequestContext
将包含一个 变量MEDIA_URL
,提供MEDIA_URL
设置的值。
在settings
中包含此内容会在模板上下文中包含MEDIA_URL
。在Django 1.8设置中默认不包含。我们需要明确设置。
context_processors = [
...
'django.template.context_processors.media', # set this explicitly
]
答案 1 :(得分:14)
models.ImageField
有一个名为url
的属性,可以为您提供图像的可浏览路径。
您应该使用artist.artist_image.url
而不是手动将MEDIA_URL
添加到您的图片名称:
<img class="avatar secondary-content" src="{{artist.artist_image.url}}" />
-
确保artist_image
不是None
,否则调用.url
会引发异常。