0

设置.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')

我的应用程序/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 时,后端返回

[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 正在显示图像。有任何想法吗?

4

1 回答 1

3

首先,您的正则表达式缺少 a $,因此它不仅匹配/welcome/而且还匹配/welcome/media/my_image.jpeg(这就是您的curl命令返回状态代码 200 的原因)。将 URL 模式更改为:

url(r'^welcome/$', views.upload, name='upload'), 

接下来,您缺少前导斜杠以使其成为绝对 URL。

<img src='/media/my_image.jpeg'>

最后,您需要为媒体文件和静态文件提供服务。在 development中,您可以将以下内容添加到项目的urls.py 中:

urlpatterns = [
    ...
]

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
于 2018-03-22T13:59:07.213 回答