@@ 1,1 1,23 @@
<div class="pagination">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">‹‹ previous</a>
{% else %}
<span class="disabled">‹‹ previous</span>
{% endif %}
{% for page in pages %}
{% if page %}
{% ifequal page page_obj.number %}
<span class="current">{{ page }}</span>
{% else %}
<a href="?page={{ page }}{% if q %}&q={{ q }}{% endif %}">{{ page }}</a>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next ››</a>
{% else %}
<span class="disabled">next ››</span>
{% endif %}
</div>
\ No newline at end of file
@@ 1,1 1,35 @@
try:
set
except NameError:
from sets import Set as set
def paginate(context, window=4):
paginator = context['paginator']
page_obj = context['page_obj']
page_range = paginator.page_range
first = set(page_range[:window])
last_start = len(page_range)-window
if last_start < 0:
last_start = 0
last = set(page_range[last_start:])
current_start = page_obj.number-1-window
if current_start < 0:
current_start = 0
current = set(page_range[current_start:page_obj.number-1+window])
pages = []
if len(first.intersection(current)) == 0:
pages.extend(list(first))
pages.append(None)
pages.extend(list(current))
else:
pages.extend(first.union(current))
if len(current.intersection(last)) == 0:
pages.append(None)
pages.extend(list(last))
else:
pages.extend(list(last.difference(current)))
return {
'pages': pages,
'page_obj': page_obj,
'paginator': paginator,
}
\ No newline at end of file