我有一个非常简单的查询集和一个相关的通用视图:

f_detail = {
         'queryset': Foto.objects.all(),
         'template_name': 'foto_dettaglio.html',
         "template_object_name" : "foto",
       }

urlpatterns = patterns('',
# This very include
(r'^foto/(?P<object_id>\d+)/$', list_detail.object_detail, f_detail, ),
)


只是用于生成照片详细页面的模板:因此没有视图。



有没有简单的方法可以链接到前一个|模板中的下一个元素
没有手动编码视图?

像这样的东西:

{% if foto.next_item %}
  <a href="/path/foto/{{ foto.next_item.id_field }}/">Next</a>
{% endif}

最佳答案

class Foto(model):
  ...
  def get_next(self):
    next = Foto.objects.filter(id__gt=self.id)
    if next:
      return next.first()
    return False

  def get_prev(self):
    prev = Foto.objects.filter(id__lt=self.id).order_by('-id')
    if prev:
      return prev.first()
    return False


您可以根据自己的喜好调整它们。我只是再次查看了您的问题...为了使其比使用if语句更容易,您可以使方法返回指向next / prev的链接的标记(如果存在),否则不返回任何内容。那么您只需执行foto.get_next等。还请记住,查询集是惰性的,因此您实际上并没有在next / prev中获得大量项目。

08-25 00:21