Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

274
Vistas
Paginación de Django desde ?page= a /page/

tengo esta vista:

 class PageView(ListView): # ... code ... paginate_by = 4

En la plantilla tengo algo como:

 <div class="pagination"> <span class="page-links"> {% if page_obj.has_previous %} <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a> {% endif %} <span class="page-current"> Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}. </span> {% if page_obj.has_next %} <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a> {% endif %} </span> </div>

¿Cómo puedo transformar la variable GET ?page=number para que se vea como /page/number/ en django?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No puedo probarlo ahora, pero debería poder reutilizar todo ListView .

Eche un vistazo a django.views.generic.list.MultipleObjectMixin#paginate_queryset :

 def paginate_queryset(self, queryset, page_size): """ Paginate the queryset, if needed. """ paginator = self.get_paginator( queryset, page_size, orphans=self.get_paginate_orphans(), allow_empty_first_page=self.get_allow_empty()) page_kwarg = self.page_kwarg # HERE page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1 try: page_number = int(page) except ValueError: if page == 'last': page_number = paginator.num_pages else: raise Http404(_("Page is not 'last', nor can it be converted to an int.")) try: page = paginator.page(page_number) return (paginator, page, page.object_list, page.has_other_pages()) except InvalidPage as e: raise Http404(_('Invalid page (%(page_number)s): %(message)s') % { 'page_number': page_number, 'message': str(e) })

Esto significa que Django busca el número de página primero en los kwargs de la vista y luego en los parámetros get .

Los valores en self.kwargs provienen de los propios **kwargs de la vista; consulte django.views.generic.base.View#as_view . Esto significa que debería poder definir una URL como url(r'^event/(?P<page>'d+)/$' y usarla con su CBV existente; debería recoger el número de página por sí solo.

over 4 years ago · Santiago Trujillo Denunciar

0

por ejemplo, puede usar la función de vista:

 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def listOfSomethinView(request, page): paginator(Something.objects.all(), 10) try: list_of_something = paginator.page(page) except PageNotAnInteger: list_of_something = paginator.page(1) except EmptyPage: list_of_something = paginator.page(paginator.num_pages) return render(request, 'path_to_your_template', { 'list_of_something': list_of_something, })

en urls.py agrega esto:

 url(r'^event/(?P<page>[0-9]{1,10})/$', views.listOfSomethingView, name='listOfSomething')

en tu plantilla usa algo como esto

 {% url 'app:listOfSomething' paginator.previous_page_number %}
over 4 years ago · Santiago Trujillo Denunciar

0

ESTÁ BIEN. Lo resolví. En realidad cuando tenía:

 url(r'^events/(?P<page>[0-9]+)/$', views.PageView.as_view(), name='events'),

Genera un error porque falta el argumento de la page y urls.py no conoce la ruta /events/ .

Entonces, en mi mapeo de URL (urls.py) he escrito:

 url(r'^events/$', views.PageView.as_view(), name='events'), url(r'^events/(?P<page>[a-z0-9]+)/$', views.PageView.as_view(), name='events'),

Cuando voy a /events/ , no se necesitan argumentos, la page se establece en 1 porque no se proporciona page_kwarg , todo bien.

Cuando voy a /events/<page>/ , toma esa variable y finalmente funciona.

Editar: puse [a-z0-9] en lugar de [0-9] porque es necesario cuando accede a /events/last/ . En la etiqueta de plantilla de URL, debo proporcionar last como una cadena: {% url 'events' 'last' %}

Gracias por las respuestas. Si cree que mi solución no es buena, comente debajo de mi respuesta.

Lo siento por mi gramática.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda