我是django的新手,在尝试显示包含多个图片的html页面时遇到了问题。
我想要实现的是父记录显示所有相关图像,在下面的示例中,ShowroomDetail是父级,ShowroomPhoto是子级。
使用Django管理屏幕,我创建了一个展厅,并上传了两个图像作为这个展厅的孩子。我可以在没有Django管理员屏幕问题的情况下查看陈列室和图像,并且可以看到它们是相关的。
不幸的是,当我尝试使用模板显示相同的信息时,我遇到了一个错误:
' ShowroomPhoto'对象不可迭代
我做错了什么?如果需要,我使用Django 1.6.2
以下是各种文件的内容。
models.py
from django.db import models
# Create your models here.
class ShowroomDetail(models.Model):
title = models.CharField(max_length=1000)
description = models.CharField(max_length=4000)
class ShowroomPhoto(models.Model):
showroom = models.ForeignKey(ShowroomDetail, related_name='photos')
photo = models.ImageField(upload_to='images/')
views.py
from django.shortcuts import render
from django.http import Http404, HttpResponse
from showroom.models import ShowroomDetail, ShowroomPhoto
# Create your views here.
def Displayshowroom(request):
showroom = ShowroomDetail.objects.all()[0]
photos = ShowroomPhoto.objects.all()[showroom.id]
return render(request, 'showroom.html', {'showroom': showroom, 'photos': photos})
showroom.html
<html>
<head>
<title>Showroom</title>
</head>
<body>
<ul>
<li>{{ showroom.title }}</li>
<li>{{ showroom.description }}</li>
<li>{{ showroom.id }}</li>
{% for photo in photos %}
<li><img src="{{ photo.url }}" height="420"/></li>
{% endfor %}
</u
</body>
</html>
答案 0 :(得分:2)
执行photos = ShowroomPhoto.objects.all()[showroom.id]
时,由于[]
(下标),您正在检索单个对象,而不是查询集。
你的意思可能是filter
:
更改
photos = ShowroomPhoto.objects.all()[showroom.id]
到
photos = ShowroomPhoto.objects.filter(showroom__id=showroom.id)
另外,在模板中:
{% for photo in photos %}
<li><img src="{{ photo.url }}" height="420"/></li>
{% endfor %}
应该是
{% for photo in photos %}
<li><img src="{{ photo.photo.url }}" height="420"/></li>
{% endfor %}
现在,您的代码可以正常运行。