【发布时间】:2011-09-23 00:09:57
【问题描述】:
我需要遍历模板中的元组,但是从我构建的代码中,我得到了一个对象(专辑)和一个查询集(照片)的元组。问题是我现在如何在模板中迭代它们?
型号:
class Album(models.Model):
title = models.CharField('כותרת', max_length=100, db_index=True)
created = models.DateTimeField('תאריך פרסום', auto_now_add=True)
creator = models.ForeignKey(User, related_name='galleries_creator', verbose_name='נכתב ע"י')
class Photo(models.Model):
title = models.CharField('כותרת', max_length=100)
album = models.ForeignKey(Album, verbose_name='שייך לאלבום')
photo = models.ImageField('תמונה', blank=True, upload_to=get_image_path)
photo_mid = models.ImageField('תמונה בינונית', blank=True, upload_to='images/galleries/mid/', editable=False)
photo_thumb = models.ImageField('תמונה קטנה', blank=True, upload_to='images/galleries/thumbs/', editable=False)
created = models.DateTimeField('תאריך פרסום', auto_now_add=True)
is_landscape = models.NullBooleanField(blank=True, verbose_name='האם תמונת לנדסקייפ', editable=False)
查看:
def index(request):
albums = Album.objects.all().order_by('?')[:10]
album_list = []
for album in albums:
album_list.append((album, Photo.objects.filter(album=album).order_by('?')[:1]))
return render_to_response('galleries/index.html',{'albums':album_list}, context_instance=RequestContext(request))
模板:
{% for album, photo in albums %}
<div class="polaroid" id="picture_{{ forloop.counter }}">
<img src="{{ MEDIA_URL }}{{ photo.photo }}" alt="Picture #{{ forloop.counter }}" />
<p class="caption"><p class="title">אלבום {{ forloop.counter }}</p><p>{{ album.creator.first_name }} {{ album.creator.last_name }}</p>
</div>
{% endfor %}
在我看来,我不能做 photo.photo 因为 photo 是一个列表,而不是一个对象,我真的不想为元组中的每张照片做一个 for 循环(只有一张照片,所以这只是一种浪费)。
assert False album_list 返回:
[(<Album: אלבום שני - ממשק מנהל>, [<Photo: אלבום 2 תמונה 2>]), (<Album: אלבום ראשון - ממשק מנהל>, [<Photo: אלבום 1 תמונה 7>]), (<Album: אלבום נתן>, [<Photo: נסיון 4>])]
我可以在我的视图或模板中做些什么来解决这个问题?
【问题讨论】:
-
你为什么不做一个嵌套的for循环呢?还是我错过了什么?
-
!0x,问题是我试图避免第二个循环。循环是时间和处理器的消费者,我已经有了我需要的东西,问题是,我可能在这里做错了,或者在视图中(需要返回 Photo 对象而不是集合)或模板中,我不认为正确的方法是当我在那里只有一个对象时为照片列表做一个 for 循环......但也许我错了......
标签: python django django-templates django-queryset