我正在开发一个图片组合应用程序,我有一个看起来像这样的网址:
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
答案 0 :(得分:2)
如果要考虑数据库更改,除了查询数据库之外别无选择,或者......如果只使用一个Web服务器,则必须在某处缓存内存中的更改。如果您没有太多数据或足够的可用内存,后者只是一个选项。
查询类似下面内容的最优雅的方法,但这是在不使用SQL的情况下在Django 1.0中很难实现的:
SELECT COUNT(*) + 1 FROM images WHERE images.field < currentfield
(其中field是您用于排序图像的字段)
要在Django中使用原始SQL,您可以阅读this page以获取更多信息。
然后您就知道了图像的位置,并且可以轻松计算出项目所在的页面。