Django 中 for 循环计数器中断
希望这个问题能简单快速地解决。我知道可以通过自定义模板标签来解决这个问题,但我想知道还有没有其他我可能忽略的方法。我为我的博客创建了一个类似画廊的功能,并且有一个画廊列表页面,可以分页显示我所有的画廊。现在,我不想在这个列表中显示每个画廊的所有照片,因为如果每个画廊有20张图片,那在每页显示5个帖子时,就会有100张图片。这太浪费了,而且处理方式也不对。
我想问的是,有没有办法只显示3张照片?我想做的事情,但我觉得可能不行,类似于(伪代码):
{% for photos in gallery.photo_set %}
{% if forloop.counter lt 3 %}
<img src="{{ photos.url }}">
{% endif %}
{% endfor %}
根据文档来看,除非我完全搞错了,不然通过模板系统是无法做到的。因此,我可以写一个自己的模板标签来解决这个问题。我可能也可以从视图的角度来做,但我还没有深入研究这个想法。另一个选择是给模型添加一个预览字段,让用户选择他们想在预览字段中显示的照片。
总之,有几种不同的选择,所以我想问问大家你们会怎么做。任何意见都很受欢迎。就我个人而言,我很高兴有这么多种方法来解决这个问题。
2 个回答
1
这个操作最好在 gallery.photo_set
这个集合里进行。模板里写死的“3”从长远来看不是个好主意。
class Gallery( object ):
def photo_subset( self ):
return Photo.objects.filter( gallery_id = self.id )[:3]
在你的视图函数中,你可以做一些事情,比如随机挑选3张照片,或者选择最近的3张照片。
def photo_recent( self ):
return Photo.objects.filter( gallery_id = self.id ).orderby( someDate )[:3]
def photo_random( self ):
pix = Photo.objects.filter( gallery_id = self.id ).all()
random.shuffle(pix)
return pix[:3]
86
使用:
{% for photos in gallery.photo_set|slice:":3" %}