2014-06-13 2 views
-1

J'ai une vue où je veux qu'un utilisateur soit capable de faire défiler une petite div de plus de 1000 objets django, n'en ayant pas plus de 10 à la fois. Aussi une fonction de rechercheDjango- Comment afficher 1000 modèles 10 à la fois?

Quelle serait la meilleure option?

Dois-je stocker les objets dans le navigateur et les récupérer? Devrais-je simplement réécrire l'affichage pour afficher 10 à la fois? Existe-t-il une élégante solution js?

Merci les gars.

+0

A quoi ressemble la vue actuellement? Merci. – alecxe

+0

Il fait juste un MyObject.objects.all() puis une boucle for dans le modèle pour afficher les objets. – Kazanz

Répondre

2

Django est inclus dans Pagination. Il existe plusieurs projets qui offrent une solution AJAX en plus de cela, l'un est django-endless-pagination. Une autre solution pourrait être quelque chose comme DataTables. Il y a aussi un projet pour l'intégrer avec Django appelé django-datatables-view

+0

Merci pour vos suggestions. Je vais certainement regarder dans ces options! – Kazanz

1

Il n'y a presque aucun cas où vous pouvez charger tout sur le côté client pour faire de la pagination. Par exemple, vous pouvez utiliser Firebase ou recharger rarement la page. Donc, pour votre cas, vous devez implémenter la vue ajax pour obtenir la portion de données nécessaire. Comme Martin l'a dit, Django a la classe sexy et facile à utiliser Paginator, qui vous aidera à faire face à tout!

Votre vue sera comme:

@ajax_request 
def my_view_ajax(req): 
    pages = Paginator(Doc.objects.all(), 10) 
    page = pages.page(int(request.GET.get('page', 1))) 
    return { 
     'total_pages': p.num_pages, 
     'data': [{ 
      'id': doc.id, 
      'title': doc.title, 
      'excerpt': doc.excerpt, 
     } for doc in page.object_list] 
    } 

Donc, vous avez des pages totales et les données à afficher.

Questions connexes