我正在尝试在网页上显示用户上传的图片。当我使用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 %}
当我创建图库图像时,会弹出损坏的图像,但无法正确访问图像。
答案 0 :(得分:1)
从static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
文件中删除gallery.urls
部分。
将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})
。
答案 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/
。