settings.py
INSTALLED_APPS = [...#'django.contrib.staticfiles',]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
程序my_app / urls.py
urlpatterns = [
url(r'^welcome/', views.upload, name='upload'),] +
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
程序my_app /模板/ template.html
<img src='media/my_image.jpeg'>
程序my_app / views.py
def upload(request):
if request.METHOD == 'POST:
...
return redirect(to another page)
return render(request, 'template.html')
template.html正确渲染,但图像已损坏。
当我尝试
时curl -D - http://127.0.0.1:8000/my_app/welcome/media/my_image.jpeg
我得到200,当我在浏览器中转到欢迎URL后,后端返回
[22/Mar/2018 13:31:57] "GET /my_app/welcome/ HTTP/1.1" 200 411
[22/Mar/2018 13:31:57] "GET /my_app/welcome/media/my_image.jpeg HTTP/1.1" 200 411
所以我不认为这是一个网址问题。 Chrome正在显示图片。任何想法?
答案 0 :(得分:3)
首先,您的正则表达式缺少$
,因此它不仅与/welcome/
匹配,还与/welcome/media/my_image.jpeg
匹配(这就是您的curl
命令返回状态代码的原因200)。将URL模式更改为:
url(r'^welcome/$', views.upload, name='upload'),
接下来,您缺少前导斜杠以使其成为绝对URL。
<img src='/media/my_image.jpeg'>
最后,您需要为媒体文件和静态文件提供服务。 In development,您可以将以下内容添加到项目 urls.py中:
urlpatterns = [
...
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)