django-pagemore
django-pagemore copied to clipboard
KISS approach to a "Load more" style AJAX paginator
=============== django-pagemore
KISS approach to a "Load more" style AJAX paginator
Requirements
- Django 1.3+
- jQuery
Features
- Non-intrusive: your Django view is completely unaware of dynamic load-more stuff going on.
- There is literally no code (no Python, no Javascript) required to get a fully AJAX style "load more" going.
- KISS
Quickstart
-
Write your view as usual, handing over an (unpaginated) list of items to a template.
-
Render the list of items in your template as follows::
{% load pagemore %} {% more_paginator items per_page=10 ordered_by="-created_at" as paginator %}
{% for item in paginator.objects %} {% if forloop.first %}
{% endif %} {{item}} {% if forloop.last %}{% if paginator.has_more %} More items... {% endif %} {% endif %} {% endfor %} -
That's all!
Pagination Strategies
When a user is paginating through a list of items, while at the same time new items are being inserted, offset based slicing would result in duplicate items being shown. A way to circumvent this is to make sure that the items are properly ordered and to filter on items after a certain point. Both strategies are supported.
Paginate by Slicing
Usage::
{% more_paginator ... strategy="slice" ... %}
Characteristics:
-
Supports both querysets and lists
-
Does not order the objects unless explicitly told to (
ordered_by
).
Paginate by Filtering
Usage::
{% more_paginator ... strategy="filter" ... %}
Characteristics:
-
Only supports querysets
-
Enforces an ordering of the objects passed (default on
id
, overridable byordered_by
).