Django:未在模板中设置MEDIA_URL

Bes*_*ung 10 python django python-3.x

我已经阅读了很多问题和文章,但找不到我所遗漏的内容.

这是我的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('\\', '/'),
)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

无论如何,我的媒体服务,因为当我去http:// localhost:8000/media/path/to/image.jpg时,我有我的形象.

但是当我在模板中时,我会这样:

<img class="avatar secondary-content" src="{{MEDIA_URL}}{{artist.artist_image}}">
Run Code Online (Sandbox Code Playgroud)

我只有图像路径.当我{{MEDIA_URL}}用'/ media /' 更改html时,它可以工作.

因此,似乎我MEDIA_URL没有设置模板,据我搜索,我看不到我错过了什么.

我在django 1.8.2.如果您需要任何信息,请问我.

ozg*_*gur 18

models.ImageField有一个名为的属性url,为您提供图像的可浏览路径.

您应该使用artist.artist_image.url而不是MEDIA_URL手动添加到图像名称前面:

<img class="avatar secondary-content" src="{{artist.artist_image.url}}" />
Run Code Online (Sandbox Code Playgroud)

-

确保artist_image不是None,否则调用.url抛出异常.


Rah*_*pta 17

您需要在设置中定义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
]
Run Code Online (Sandbox Code Playgroud)

  • @Bestasttung其他答案仅在您需要获取对象的完整URL时才有用.但是,如果您想访问媒体URL前缀,那么这个答案就是解决方案. (3认同)