这是一个快速/简单的希望。我知道通过自定义模板标签来解决这个问题的方法,但我很好奇是否有其他方法我在看。我为我的博客创建了各种各样的画廊功能,并且我有一个画廊列表页面,用于分割我的所有画廊。现在,我不想显示该列表中每个图库的所有照片,因为如果每个图库甚至有20个图像,那么如果我在5个帖子中分页,则该页面上有100个图像。这是浪费,而且是错误的方式。
我的问题是,有没有办法只显示照片集中的3张照片?我想做什么,但我不认为是可能的(像伪代码):
{% for photos in gallery.photo_set %}
{% if forloop.counter lt 3 %}
<img src="{{ photos.url }}">
{% endif %}
{% endfor %}
从文档来看,除非我完全错过它,否则通过模板系统无法实现。因此,我可以编写自己的各种模板标签来解决它。我可以从视角来做一些事情,但我没有深入研究这个想法。我的另一个选项是为模型提供预览字段,并允许用户在预览字段中选择他们想要的照片。
无论如何,有几个不同的选择,所以我想我会对观众进行一次调查,看看你是怎么做到的。任何意见表示赞赏。就个人而言,享受这种猫的皮肤有很多方法。
答案 0 :(得分:76)
使用:
{% for photos in gallery.photo_set|slice:":3" %}
答案 1 :(得分: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]