在Django 1.6中显示子表中的所有照片

时间:2014-05-19 21:06:46

标签: python django django-models django-templates django-views

我是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>

1 个答案:

答案 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 %}

现在,您的代码可以正常运行。