Django-filter: Documentar cómo funciona django-filter con django-pagination

Creado en 13 ago. 2009  ·  20Comentarios  ·  Fuente: carltongibson/django-filter

Ambos funcionan bien juntos, me tomó un tiempo arreglarlo. Basado en el ejemplo en los documentos:

{% block content %}
    <form action="" method="get">
        {{ f.form.as_p }}
        <input type="submit" />
    </form>

    {% autopaginate f.qs 40 as filter_list %}

    {% for obj in filter_list %}
        {{ obj.name }} - ${{ obj.price }}<br />
    {% endfor %}

    {% paginate %}
{% endblock %}

La clave es que tienes que usar el argumento _as_ de la paginación.

Comentario más útil

Muy, muy útil. Gracias.

Todos 20 comentarios

Muy, muy útil. Gracias.

Sugeriría documentar cómo funciona esto también con django-sorting. Desafortunadamente, la clasificación de django debe ir antes de la paginación y no admite la palabra clave 'as', por lo que _no_ podemos hacer algo como esto:

{% autosort f.qs as actionlog %}
{% autopaginate actionlog 30 %}

Archivado aguas arriba en http://github.com/directeur/django-sorting/issues/#issue/4.

Consiga este problema cuando intento lo anterior.

http://code.google.com/p/django-pagination/issues/detail?id=59#c0

¿Alguna idea sobre lo que podría ser?

Hay un problema con la paginación de django: cuando estás, digamos, en la página 5 y aplicas un filtro, el filtro también pasa la variable GET de "página", así que en la página filtrada ya estás en la página 5, eso es incorrecto . ¿Hay alguna manera de excluir de la URL la variable que usa django-pagination cuando se aplica un filtro? Espero que esto tenga sentido ...

mdgart,

Resolví el problema de la variable de página en el cliente con jQuery y la biblioteca jQuery Back Button & Query (BBQ). Ver: http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery.ba-bbq.min.js"></script>
<script type="text/javascript">
  // on page load complete
  $(function(){
    // force all filter links to return to page 1
    $('#changelist-filter a').querystring('page=1');
  });
</script>

Cuando el usuario hace clic en un enlace de filtro, JavaScript fuerza el parámetro de obtención de "página" a 1.

En mi ejemplo, todos mis filtros se muestran como enlaces, ubicados dentro de un div con una identificación de "changelist-filter". Deberá cambiar su selector de jQuery según corresponda.

Espero que esto ayude.

mdgart, jonathonadler,

Resolví el problema de la variable de página de una manera ligeramente diferente que evita depender de javascript: simplemente no pase el parámetro 'página' al FilterSet. Por ejemplo, según el ejemplo de los documentos:
def product_list (solicitud):
data = request.GET.copy ()
si 'página' en los datos:
del data ['página']
f = ProductFilter (datos, queryset = Product.objects.all ())
return render_to_response ('my_app / template.html', {'filter': f})
Espero poder ayudar.

Muy buena solución richardbarran, ¡gracias!

Gracias. Pensé en parchear la documentación para hablar sobre la paginación de django, pero tengo un pequeño problema: ¿en qué formato está la documentación? :-(
No es el primero, como se queja docutils (al menos en mi computadora). ¿Alguna sugerencia?

Richard, es el primero, pero debe procesarse con sphinx (http://sphinx.pocoo.org/).

En el momento en que uso la etiqueta autopaginar, obtengo "el objeto de tipo 'fooFilter' no tiene len ()" typeerror. Estoy seguro de que obtuve el resultado enurable, porque puedo recorrerlo y mostrar los objetos sin usar django-pagination. ¿Cómo puedo arreglar eso? ¡Gracias!

Excelente, me ahorraste mucho tiempo gracias.

¿Podría darme enlaces de github a django-pagination y django-sorting que funcionan juntos? Probé algunos de estos repositorios sin éxito. Yo tengo un :

TemplateSyntaxError en / ads / search /
Se ha detectado VariableDoesNotExist mientras se renderiza: búsqueda fallida de la clave [sorted_objects] en u '[{}, {\' csrf_token \ '...

usando esta plantilla

    {% autosort filter.qs as sorted_objects %}
    {% autopaginate sorted_objects 10 as object_list %}

    {% for object in object_list %}
        {{ object }}
    {% endfor %}

    {% paginate %}  

    <ul>
        <li>{% anchor price "First Field" %}</li>
        <li>{% anchor surface "Other Field" %}</li>
    </ul>

Gracias !

Lo siento, no he usado django-sorting, así que no puedo ayudar.

¡Buena suerte!

nótese bien

¿Podría darme enlaces de github a django-pagination y django-sorting que funcionan juntos? Probé algunos de estos repositorios sin éxito. Yo tengo un :

TemplateSyntaxError en / ads / search /
Se ha detectado VariableDoesNotExist mientras se renderiza: búsqueda fallida de la clave [sorted_objects] en u '[{}, {\' csrf_token \ '...

usando esta plantilla

  {% autosort filter.qs as sorted_objects %}
  {% autopaginate sorted_objects 10 as object_list %}

  {% for object in object_list %}
      {{ object }}
  {% endfor %}

  {% paginate %}  

  <ul>
      <li>{% anchor price "First Field" %}</li>
      <li>{% anchor surface "Other Field" %}</li>
  </ul>

Gracias !

Entonces, aquí hay un ejemplo de requisitos de pip en funcionamiento para mi pregunta anterior:

filtro-django == 0.5.3
django-pagination == 1.0.7
-e git: //github.com/lukeman/django-sorting.git#egg = django_sorting

¿Alguien sabe si es posible usar la paginación y la clasificación con django-filter usando vistas genéricas? Veo en estos ejemplos que no se está utilizando el método de vista genérico.

Si entiendo tu pregunta, es posible, la uso aquí: https://github.com/ouhouhsami/django-geoads/blob/master/geoads/views.py

En caso de que alguien esté interesado, escribí un reemplazo mucho más completo para django-sorter, llamado django-sorter: http://django-sorter.readthedocs.org/

Como parte de ponerme al día con el rastreador de problemas, cerraré este. Han pasado más de 2 años desde el último comentario.

Si alguien quiere enviar una solicitud de extracción actualizando la documentación que muestra la integración con las soluciones actuales de paginación / clasificación, estaría muy feliz de revisar, pero a falta de eso, volveré a esto la próxima vez que aparezca _IRL_.

Espero que tenga sentido.

¡¡¡Gracias!!!

¿Fue útil esta página
0 / 5 - 0 calificaciones