django 1.3中模板中的自定义分页问题

时间:2011-08-10 17:31:30

标签: django django-templates django-1.3

我正在制作一个画廊,我有两个模特。如下所示

class Gallery(models.Model):
    name = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published', auto_now_add=True)
    slug_name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name

class Image(models.Model):
    gallery = models.ForeignKey(Gallery)
    image = models.ImageField(upload_to='gallery/%Y/%m/%d')
    caption = models.TextField(blank=True)
    up_date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.caption

现在我有一个视图,它将提供单个图像页面。我得到像这样的图像

def image_page(request, slug_name, image_id):
    image = Image.objects.get(pk = image_id)
    all = Gallery.objects.get(slug_name = slug_name).image_set.all()
    return render_to_response('gallery/image_page.html',
                              {
                                  'image': image,
                                  'all': all,
                              }, context_instance = RequestContext(request))

通过“图像”我得到那张单张图片。通过“所有”我得到的所有图像可能需要在视图中显示分页。分页仅表示下一个和上一个按钮。

现在,如果此单页是第一页,则如果不显示最后一页的下一个按钮,则上一页链接不应该相似。除此之外,应显示两个链接。

我的问题是如何在模板中执行此操作?我尝试使用for循环不工作,还有另一个问题如何链接到下一个/上一个图像我的网址寻找/gallery/slug_name/image_id.html [注意:我的图片ID不是逐渐增长,如1,2,3,示例我在画廊中有4张图片,其中ID为4,6,7,8]

顺便说一句,我试过@ murgatroid99的方式。它很棒!但实际上我必须像这样使用网址

http://localhost:8000/gallery/fourth-gallery/hello?image=2

我想要的是使用分页和网址

http://localhost:8000/gallery/1, http://localhost:8000/gallery/2, http://localhost:8000/gallery/3 Etc

2 个答案:

答案 0 :(得分:0)

最好的方法可能是让视图根据请求中的信息生成页面,然后让模板呈现视图返回的页面。可以在Django documentation中找到一个很好的解释和示例。

答案 1 :(得分:0)

你不应该将all用作变量,因为python中有一个内置函数。 见http://docs.python.org/library/functions.html#all

您可以使用django的分页来显示图像。在您的情况下,pagesize将为1,因为您每页显示1个图像对象。 Django分页具有内置功能,可以查找下一个或上一个可用的位置。