代码之家  ›  专栏  ›  技术社区  ›  f4nt

用于循环计数器断开的Django

  •  26
  • f4nt  · 技术社区  · 16 年前

    希望这是一个快速/简单的方法。我知道通过自定义模板标记来解决这个问题的方法,但我很好奇是否还有其他方法需要我仔细研究。我为我的博客创建了一个类似的库函数,我有一个库列表页,它对我的所有库进行分页。现在,我不想显示该列表中每个图库的所有照片,因为如果每个图库甚至有20个图像,那么如果我在5篇文章中分页,那么一页上有100个图像。那是浪费,而且是错误的做事方式。

    我的问题是,有没有办法只显示照片集中的3张照片?我想做什么,但我不想 认为 可能是类似(伪代码):

    {% for photos in gallery.photo_set %}
       {% if forloop.counter lt 3 %}
         <img src="{{ photos.url }}">
       {% endif %}
    {% endfor %}
    

    从文档来看,除非我完全丢失了它,否则通过模板系统是不可能的。因此,我可以编写自己的模板标签来解决这个问题。我也许可以从观点上做点什么,但我并没有深入研究过这个想法。我的另一个选择是给模型一个预览字段,并允许用户在预览字段中选择他们想要的照片。

    不管怎样,有几个不同的选择,所以我想我会投票给观众看你会怎么做。欢迎发表任何意见。就我个人而言,享受这只猫的皮肤有很多种方式。

    2 回复  |  直到 16 年前
        1
  •  75
  •   Alex Martelli    16 年前

    用途:

    {% for photos in gallery.photo_set|slice:":3" %}
    
        2
  •  1
  •   S.Lott    16 年前

    最好是在 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]