媒体文件未在Django中显示

时间:2017-07-15 18:44:28

标签: python django

我正在尝试在网页上显示用户上传的图片。当我使用Django管理界面上传图像文件时(我为带有文件字段的图库图像创建了一个模型),图像正确地存储在/ media / images中。我在settings.py中设置了我的媒体设置,如下所示:

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:

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

然后这是访问图像的模板代码的一部分:

{% 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 %}

当我创建图库图像时,会弹出损坏的图像,但无法正确访问图像。

2 个答案:

答案 0 :(得分:1)

  1. static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)文件中删除gallery.urls部分。

  2. src="g.imgfile.url"替换为src="{{ g.imgfile.url }}"

  3. 除了问题:为什么要将这个大字典({"text1":texts[0].text,...)传递给您的模板?这是容易出错和不好的做法。您应该通过'texts': texts并在模板内部使用{% for text in texts %} forloop对其进行迭代。因此,render方法应该类似于render(request, 'index.html', {'texts': texts, 'gallery': gal})

答案 1 :(得分: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。你似乎只是在/media/排位赛。我还认为你的正则表达式应该是^media/,而不是/media/