2017-03-09 21 views
0

アップロードされた画像は、ほとんどのDjangoアプリのようにmediaフォルダに保存されます。しかし、私はいくつかの理由で彼らは私のアプリでいくつかの変更を加えた後に表示を停止しました。奇妙なことは、画像divのinspect要素をクリックするとimg srcが表示され、正しいことです。 img src:<img src="/media/REC-2.jpg">にカーソルを合わせると、「画像を読み込めませんでした」と表示されます。私の静的なファイルはすべて正常に表示されることを覚えておいてください。メディア画像(ユーザーからアップロードされた画像Post)のみ表示されます。ページに正常に読み込まれたにもかかわらず、メディア画像が表示されない

私の見解には、問題が何であるかを示す奇妙なものもあります。ここに私のコードは次のとおりです。

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

のURL

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}) 

choices.pyは、こちらのページ(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を印刷し、次にforループを経てcategory 1を印刷した後、それぞれ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の最後に '$'を追加することを忘れてしまいました。あなたが他のモジュールからインポートしているURLは、それを必要としませんが、 'profile'、' article'、 'bv'というあなたのURLに入れたいと思うでしょう。 – 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

okだから私は2つの問題があると思いますメディアファイルの本当の問題を隠していました。メディアファイルは、そのアドレスで配信されていません。前に起こっていたことは、 '/ media /'へのリクエストが 'boxes_view'に送られて何も返されないということでした。これで、メディアファイルの問題をより効果的にデバッグできるようになりました。 – ChidG

答えて

0

は、問題は、それがここにあるように見えるが、あなたの画像アップロードのコードではありません。 jpgはすべて同じサイズ(6370)で、pngのサイズはすべて0であるため、画像の配信方法に問題があります。

実際、初期以外のすべてのリクエストは、GET /news/が失敗しているようです。 /static/へのリクエストからの応答はすべてサイズ0であり、リクエストからの応答は/media/です。サイズはすべて6370です。

+0

画像の配信に問題がある場合は、どうすれば確認できますか?また、すべての静的ファイルが動作していて、0と表示されていても表示されています(その意味がわかりません)。 – Zorgan

+0

あなたのアプリが 'jpg'ファイル用に提供している6370バイトを見てください。 Chromeのネットワークタブを開き、 'jpg'リソースへのリクエストをクリックして、レスポンスをプレビューします。 – Julien

+0

すべてのメディア画像に「この要求には応答データがありません」と表示されます。また、プレビューが利用できません。 – Zorgan

関連する問題