Si desea acceder a los datos de la tienda en una solicitud posterior, deberá almacenarla en algún lugar. Django proporciona varias maneras para archivar esto:
1) Se puede utilizar sessions para almacenar la consulta: Cada visitante que visita su sitio conseguirá un objeto sesión vacía y se puede almacenar lo que quieras dentro de este objeto, que actúa como un dict Drawback: un solo visitante no puede hacer múltiples búsquedas con paginación al mismo tiempo.
2) Use cookies: Si configura una cookie que está almacenada en el lado del cliente, el navegador agregará los datos de la cookie a cada solicitud en la que pueda acceder a ella. Las cookies son más amigables para el servidor, ya que no necesita un administrador de sesión para ellas en el servidor, pero los datos almacenados en las cookies son visibles (y editables) para el cliente. Drawback: lo mismo que antes.
3) Use los campos ocultos: Puede agregar un formulario con algunos campos ocultos en su página de resultados de búsqueda y almacenar la consulta dentro de ellos. Luego, el cliente reenviará la consulta cada vez que envíe el formulario. Drawback: debe usar un formulario con botones de envío para la paginación en su página (los enlaces simples no funcionarán).
4) Crear enlaces que contienen la consulta: En lugar de utilizar POST, también puede utilizar GET. Por ejemplo, podría tener un enlace como "/search/hello+world/?order=votes"
y "enlaces paginados" como "/search/hello+world/2/?order-votes"
. Luego, la consulta se puede recuperar fácilmente desde la URL. Drawback: la cantidad máxima de datos que puede enviar a través de GET es limitada (pero eso no debería ser un problema para una búsqueda simple).
5) Utilice una combinación: Es posible que desee almacenar todos los datos en una sesión o una base de datos y acceder a ellos a través de una clave generada que puede colocar en la URL. Las URL pueden parecerse al "/search/029af239ccd23/2"
(para la 2ª página) y puede usar la clave para acceder a una gran cantidad de datos que ha almacenado anteriormente. Esto elimina el inconveniente de la solución 1 y de la solución 4. Nueva desventaja: mucho trabajo :)
6) utilizar AJAX: con el Ajax puede almacenar los datos en el interior de algunos js-variables en el lado del cliente, que luego se pasaron a las otras peticiones Y como Ajax sólo se actualizará su lista de resultados. , las variables no se pierden.
Gracias, esto es útil. Solo para desempaquetar esta pregunta un poco más: ¿es este el uso previsto para la clase de paginador? Mi vista procesa el formulario de búsqueda inicial, luego envía la plantilla al objeto paginator.page() para la primera página. La lista de resultados se genera desde object_list para esa página. Parece extraño que no pude enviar el conjunto completo de resultados de búsqueda, y de alguna manera navegar a través de él sin volver a enviar la búsqueda de cada página. Si ese es el uso previsto para la clase, puedo trabajar con eso. Solo quiero asegurarme de no perderme algo obvio. ¡Gracias! – andyashton
Sí, ese es el uso previsto. No olvide que Django es un marco web y, por su naturaleza, las solicitudes web no son explícitas. Entonces, si quieres mantener el estado, tendrás que guardarlo en alguna parte, y tux21b te ha dado algunas opciones sobre dónde. –
Muy útil, gracias a los dos. – andyashton