即使成功加载页面,也不会显示媒体图像

问题描述:

与大多数Django应用程序一样,来自用户的上传图像存储在media文件夹中。但是,由于某种原因,我在我的应用程序中进行了一些更改后,他们停止了显示奇怪的是,当我点击图像div上的检查元素时,它显示了img src,它是正确的。当我将鼠标悬停在img src:<img src="/media/REC-2.jpg">上时,它只是说'无法加载图像'。请记住,我所有的静态文件都很好显示。只是媒体图像(通过用户Post上传的图像),没有显示。即使成功加载页面,也不会显示媒体图像

在我看来,还有一件奇怪的事情可能表明问题是什么。这里是我的代码:

choices.py

CATEGORY_CHOICES = (
    ('1', 'news'), 
    ('2', 'sport'), 
    ('3', 'technology'), 
) 

网址

url(r'^(?P<category>\w+)/', boxes_view, name='bv'), 

意见

def boxes_view(request, category): 
    print('initial', category) 

    for a, b in CATEGORY_CHOICES: 
     if b == category: 
      category = a 

    print('category', category) 

    posts = Post.objects.filter(category=category) 
    for post in posts: 
     print('POST', post.id) 

    return render(request, 'boxes.html', {'posts': posts}) 

下面是我的终端加载页面(http://127.0.0.1:8000/news/)后会发生什么吧:

initial news 
category 1 
POST 1 
POST 2 
... 
POST 241 
POST 242 
[09/Mar/2017 23:39:33] "GET /news/ HTTP/1.1" 200 19661 
[09/Mar/2017 23:39:34] "GET /static/css/base.css HTTP/1.1" 304 0 
initial media 
initial media 
category media 
initial media 
category media 
initial media 
initial media 
[09/Mar/2017 23:39:34] "GET /static/images/settingsIcon.png HTTP/1.1" 304 0 
category media 
[09/Mar/2017 23:39:34] "GET /media/465054_3137058941780_869886704_o_o8zCskP.jpg HTTP/1.1" 200 6370 
[09/Mar/2017 23:39:34] "GET /static/images/trtLogo.png HTTP/1.1" 304 0 
category media 
category media 
[09/Mar/2017 23:39:34] "GET /media/REC-2.jpg HTTP/1.1" 200 6370 
[09/Mar/2017 23:39:34] "GET /static/images/mapIcon.png HTTP/1.1" 304 0 
[09/Mar/2017 23:39:34] "GET /static/js/base.js HTTP/1.1" 304 0 
[09/Mar/2017 23:39:34] "GET /media/htcStory_xoFbTkY.JPG HTTP/1.1" 200 6370 
[09/Mar/2017 23:39:34] "GET /media/34_comparison.jpg HTTP/1.1" 200 6370 
[09/Mar/2017 23:39:34] "GET /media/REC_aeXxNPK.jpg HTTP/1.1" 200 6370 

这里发生了什么?前几行是正确的,它打印initial news,然后category 1通过for循环后,然后它通过每个Post。然后它变得奇怪。它返回到第一个打印语句并多次打印initial mediacategory media。在这些印刷品之间,它加载媒体图像。任何想法发生了什么以及我如何解决它?

编辑:全urls.py

urlpatterns = [ 
    url(r'^more/$', more, name='more'), 
    url(r'^q/', search, name='search'), 
    url(r'^admin/', admin.site.urls, name='admin'), 
    url(r'^post/', include('post.urls')), 
    url(r'^accounts/', include('allauth.urls')), 

    url(r'^profile/(?P<user>\w+)/', profile, name='profile'), 

    #category 
    url(r'^(?P<category>\w+)/(?P<id>\d+)/', article, name='article'), 
    url(r'^(?P<category>\w+)/', boxes_view, name='bv'), 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

settings.py

MEDIA_URL = '/media/' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

STATIC_URL = '/static/' 

STATIC_ROOT = 'draft1/static' 

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
] 
+0

我不认为这会解决你的媒体问题,但你忘了在大多数URL的末尾添加'$',这意味着你最终会出现一些意外的行为。您从其他模块导入的网址并不需要它,但您很可能希望将它放在名为“个人资料”,“文章”和“bv”的网址上。 – ChidG

+0

它没有解决它,但是当我在'bv'的末尾添加'$'时,所有媒体图像请求都从'“GET /news/media/htcStory_xoFbTkY.JPG HTTP/1.1”200 19616'变为'“GET /news/media/htcStory_xoFbTkY.JPG HTTP/1.1”404 4923'。如果我不添加'$',那么媒体的GET在200之后都有相同的数字,而添加'$'会在404之后为每个图像提供一个不同的数字。 – Zorgan

+0

好吧,所以我认为有两个问题 - 这个其中一个掩盖了媒体文件的真正问题,那就是他们没有在该地址提供服务。之前发生的事情是,对“/ media /”的请求正被路由到“boxes_view”并且什么都不返回。您现在可以更有效地调试媒体文件问题。 – ChidG

的问题看起来并不像它在这里,但在你的图片上传代码。由于每个jpg具有相同的尺寸(6370),并且每个png的尺寸为0,因此您提供图像的方式有问题。

事实上,除最初GET /news/之外的所有要求似乎都失败了。从请求到/static/的回复都有尺寸0和请求回复/media/都有大小6370

+0

我怎么能看到服务我的图像是否有问题?所有的静态文件也工作并显示正常,即使它说0(不知道这意味着什么)。 – Zorgan

+0

看看你的app为'jpg'文件提供的6370个字节。打开Chrome网络标签,点击对jpg资源的请求,并预览响应。 – Julien

+0

所有的媒体图片都会说'这个请求没有可用的响应数据'。他们也没有可用的预览。 – Zorgan