Django Pagination - 重定向到页面上的对象已打开

时间:2009-05-13 14:32:38

标签: django

我正在开发一个图片组合应用程序,我有一个看起来像这样的网址:

url(r'^(?P<slug_val>[-\w]+)/(?P<page>[0-9]+)/(?P<id>[0-9]+)/$', 'portfolio.views.imagedetail')

基本上,page元素只在那里,所以我可以很好地将用户重定向回他们来自的缩略图页面。但是,如果URL被传递,然后在图像之前添加或删除了一些图像,则它可能不再在该页面上。在这种情况下,我想将用户重定向到:

slug/correctpage/id

我无法解决的问题是如何使用Django的内置分页来计算图像所在的页面。这是我到目前为止所得到的:

def imagedetail(request, slug_val, page, id):
    p = get_object_or_404(MyPortfolio, slug=slug_val)

    paginator = Paginator(p.images.all(), 25)

    # find out which page the image with id is on, if it's not page,
    # then redirect, otherwise render

我知道我可以遍历每个页面,但这似乎会不必要地打到数据库,我相信必须有一个更优雅的方式来实现它。

谢谢,

的Dom

1 个答案:

答案 0 :(得分:2)

如果要考虑数据库更改,除了查询数据库之外别无选择,或者......如果只使用一个Web服务器,则必须在某处缓存内存中的更改。如果您没有太多数据或足够的可用内存,后者只是一个选项。

查询类似下面内容的最优雅的方法,但这是在不使用SQL的情况下在Django 1.0中很难实现的:

SELECT COUNT(*) + 1 FROM images WHERE images.field < currentfield 

(其中field是您用于排序图像的字段)

要在Django中使用原始SQL,您可以阅读this page以获取更多信息。

然后您就知道了图像的位置,并且可以轻松计算出项目所在的页面。