django 模板渲染的媒体图像损坏
media image rendered by django template broken
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/templates/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 后端 returns
[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
所以我认为这不是 url 问题。 Chrome 正在显示图像。有什么想法吗?
首先,您的正则表达式缺少 $
,因此它不仅匹配 /welcome/
,而且匹配 /welcome/media/my_image.jpeg
(这就是为什么您的 curl
命令 returns状态代码 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)
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/templates/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 后端 returns
[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
所以我认为这不是 url 问题。 Chrome 正在显示图像。有什么想法吗?
首先,您的正则表达式缺少 $
,因此它不仅匹配 /welcome/
,而且匹配 /welcome/media/my_image.jpeg
(这就是为什么您的 curl
命令 returns状态代码 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)