Если вы хотите получить доступ к данным хранилища в более позднем запросе, вам придется его где-то хранить. Django предоставляет несколько способов архивировать это:
1) Вы можете использовать sessions для хранения запроса: Каждый посетитель, который посещает ваш сайт будет получать объект сеанса, и вы можете хранить все, что вы хотите внутри этого объекта, который действует как дикт. Недостаток: один посетитель не может выполнять множественный поиск с разбивкой по страницам одновременно.
2) Использование файлов cookie: Если вы установили cookie, который хранится на стороне клиента, браузер добавит данные cookie к каждому запросу, к которому вы можете получить доступ. Файлы cookie более дружественны к серверу, потому что для них на сервере не нужен диспетчер сеансов, но данные, хранящиеся в файлах cookie, видны (и редактируются) клиенту. Недостаток: тот же, что и раньше.
3) Использование скрытых полей: Вы можете добавить форму с некоторыми скрытыми полями на страницу результатов поиска и сохранить запрос внутри них. Затем клиент отправляет запрос при отправке формы. Недостаток: вы должны использовать форму с кнопками отправки для разбивки на страницы на странице (простые ссылки не будут работать).
4) Создать ссылки, содержащие запрос: Вместо использования POST вы также можете использовать GET. Например, у вас может быть ссылка вроде "/search/hello+world/?order=votes"
и «с разбивкой на страницы», например, "/search/hello+world/2/?order-votes"
. Затем запрос можно легко получить из URL-адреса. Недостаток: максимальный объем данных, которые вы можете отправлять через GET, ограничен (но это не должно быть проблемой для простого поиска).
5) Используйте комбинацию: Возможно, вы захотите сохранить все данные в сеансе или базе данных и получить к ним доступ с помощью сгенерированного ключа, который вы можете поместить в URL-адрес. URL-адреса могут выглядеть так: «/search/029af239ccd23/2"
(для 2-й страницы), и вы можете использовать ключ для доступа к огромному количеству данных, которые вы сохранили ранее. Это устраняет недостаток решения 1, а также решение 4. Новый недостаток: много работы :)
6) Использование AJAX: с помощью AJAX вы можете хранить данные в некоторых JS-переменных на стороне клиента, который может затем пропускают к другим запросам И поскольку AJAX будет обновлять только свой список. , переменные не теряются.
Спасибо, это полезно. Просто, чтобы распаковать этот вопрос еще немного: это предназначение для класса paginator? Мой просмотр обрабатывает начальную форму поиска, а затем отправляет шаблон объекту paginator.page() для первой страницы. Список результатов генерируется из object_list для этой страницы. Кажется странным, что я не мог отправить его весь набор результатов поиска, и каким-то образом прокручивать его, не перегружая поиск для каждой страницы. Если это предназначение для класса, я могу работать с ним. Просто хочу убедиться, что я не пропущу что-то очевидное. Благодаря! – andyashton
Да, это предполагаемое использование. Не забывайте, что Django - это веб-инфраструктура, и по своей природе веб-запросы несовместимы. Поэтому, если вы хотите сохранить состояние, вам придется его где-то хранить - и tux21b предоставил вам некоторые варианты относительно того, где. –
Очень полезно, спасибо вам обоим. – andyashton