Django Pagination - перенаправление на страницу, на которой находится объект - PullRequest
0 голосов
/ 13 мая 2009

Я работаю над приложением портфолио изображений, и у меня есть URL, который выглядит следующим образом:

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

Я знаю, что мог бы перебирать каждую страницу, но похоже, что она попадет в базу данных без необходимости, и я уверен, что должен быть более элегантный способ сделать это.

Спасибо

Дом

1 Ответ

2 голосов
/ 13 мая 2009

Если вы хотите учесть изменения базы данных, у вас не будет другого выбора, кроме как запросить базу данных или ... вы должны где-то кэшировать изменения в памяти, если вы используете только один веб-сервер. Последнее возможно только в том случае, если у вас недостаточно данных или недостаточно памяти.

Самый элегантный способ запроса чего-то подобного следующему, но это очень сложно реализовать в Django 1.0 без использования SQL:

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

(где поле - это поле поля, которое вы используете для упорядочивания изображений)

Чтобы использовать необработанный SQL в Django, вы можете прочитать эту страницу для получения дополнительной информации.

Тогда вы знаете положение своего изображения и можете легко рассчитать страницу, на которой находится элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...