2017-07-15 28 views
0

ユーザーがアップロードした画像をWebページに表示しようとしています。 Django管理インターフェース(ファイルフィールドを持つギャラリー画像のモデルを作った)を使って画像ファイルをアップロードすると、画像は/ media/imagesに正しく保存されます。メディアファイルがDjangoに表示されない

MEDIA_URL = "/media/" 
MEDIA_ROOT = os.path.join(BASE_DIR, "media") 

プロジェクトurls.py:

from django.conf.urls import include, url 
from django.contrib import admin 
import gallery.views 
from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('gallery.urls')), 
]+ static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) 

ギャラリーurls.py:

from django.conf.urls import url 
from django.conf import settings 
from django.conf.urls.static import static 
from . import views 

urlpatterns = [ 
url(r'^', views.homepage, name = 'home'), 
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

ギャラリーviews.py:

私は次のようにsettings.pyに設定された私のメディア設定を持っています
def homepage(request): 
    texts = Sitetext.objects.all() 
    gal = Galleryimg.objects.all() 
    gal.order_by('position') 


return render(request,'index.html', {"text1":texts[0].text,"text2":texts[1].text,"text3":texts[2].text,"text4":texts[3].text,"title1":texts[0].title,"title2":texts[1].title,"title3":texts[2].title,"title4":texts[3].title,"gallery":gal}) 

そして、これはthの一部です画像にアクセスするテンプレートコード:

{% for g in gallery %} 
    <div class="col-md-3 col-sm-4 col-xs-6"> 
     <img class="img-responsive" src="g.imgfile.url" /> 
    </div> 
{% endfor %} 

ギャラリー画像を作成すると、壊れた画像がポップアップしますが、画像に正しくアクセスできません。

答えて

1
  1. あなたgallery.urlsファイルから、static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)部分を削除します。

  2. src="g.imgfile.url"src="{{ g.imgfile.url }}"に置き換えます。別に

質問:は、なぜあなたはあなたのテンプレートに、この大きな辞書({"text1":texts[0].text,...)を渡すのですか?エラーが発生しやすく、悪い習慣です。 'texts': textsを渡し、テンプレート内で{% for text in texts %}forloopを繰り返して繰り返します。したがって、renderメソッドはrender(request, 'index.html', {'texts': texts, 'gallery': gal})のようになります。

+0

私は1.と2.の両方を行い、ファイルはまだ表示されません。 [3]:from gallery.models import Galleryimg In [4]:Galleryimg.objects.all() Out [4]:]は、 ] [ [5]:Galleryimg.objects.all()[0] Out [5]: In [6]:Galleryimg.objects.all()[0] .imgfile Out [6]: In [7]:Galleryimg.objects.all()[0] .imgfile.url Out [7]: '/ media/images/20150223_083553。 jpg ' –

+0

URLに「127.0.0.1:8000/media/images/20150223_083553」とヒットした場合は、jpg'、あなたは404を手に入れますか? 'urls.py'ファイルの中でこれを' django.views.static import serve'から一番上に置き、 'static(settings.MEDIA_URL ...)'を削除し、 'urlpatterns + = [url( r '^ media /(?P 。*)'、serve、{'document_root':settings.MEDIA_ROOT})] '。 –

+0

いいえ、画像がきれいに読み込まれます。 –

0

私はこれを行うと、私はDjangoの開発サーバからメディアファイルを提供することができる午前:

urlpatterns += [ 
    url(r'^media/(?P<path>.*)$', django.views.static.serve, { 
    'document_root': settings.MEDIA_ROOT}),] 

ちょうどプロジェクトurls.py.のそれを含むのに十分でなければなりません

あなたの問題は、urls.pyのメディアURLエントリが正しくない可能性があります。おそらく/media/something.pngのようなものでしょうが、メディアファイルの実際のURLと一致していないようです。あなたは/media/で予選しているようです。私はまたあなたの正規表現は^media/でなく、/media/であるべきだと思います。

関連する問題