我正在制作一个画廊,我有两个模特。如下所示
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
答案 0 :(得分:0)
最好的方法可能是让视图根据请求中的信息生成页面,然后让模板呈现视图返回的页面。可以在Django documentation中找到一个很好的解释和示例。
答案 1 :(得分:0)
你不应该将all用作变量,因为python中有一个内置函数。 见http://docs.python.org/library/functions.html#all
您可以使用django的分页来显示图像。在您的情况下,pagesize将为1,因为您每页显示1个图像对象。 Django分页具有内置功能,可以查找下一个或上一个可用的位置。