views
def public_main(request, cid=0, page=1):
categories = Category.objects.all()
if cid == 0:
cid = categories.first().cid
page_now = page
kw = request.GET.get("kw")
if kw == None:
articles = Article.objects.filter(cid=cid)
else:
articles = Article.objects.filter(cid=cid, title__contains=kw)
paginator = SelfPaginator(articles, 2)
pager = paginator.page(page)
pager.page_range = paginator.custom_range(paginator.num_pages,page, 3)
return render(request, "wenzhang_xinwen.html", locals())
tools
import math
from django.core.paginator import Paginator
class SelfPaginator(Paginator):
def custom_range(self, num_pages, page, per_range):
self.num_pages = num_pages
if per_range > self.num_pages:
return range(1, self.num_pages + 1)
elif page <= per_range // 2:
return range(1, per_range + 1)
elif page + per_range // 2 > self.num_pages:
return range(self.num_pages - per_range + 1, self.num_pages + 1)
else:
return range(page - per_range // 2, page + math.ceil(per_range / 2))
page.html
<div class="pageSelect">
<span>共 <b>{{ paginator.count }}</b> 条 每页 <b>{{ paginator.per_page }}</b>条 {{ page_now }}/{{ paginator.num_pages }}</span>
<div class="pageWrap">
{% if page > 1 %}
<a href="{% url 'App:main' cid=cid page=page_now|add:'-1' %}" class="pagePre"><i class="ico-pre"> </i></a>
{% endif %}
{% for page in pager.page_range %}
{% if page == page_now %}
<a href="{% url 'App:main' cid=cid page=page %}" class="pagenumb cur">{{ page }}</a>
{% else %}
<a href="{% url 'App:main' cid=cid page=page %}" class="pagenumb">{{ page }}</a>
{% endif %}
{% endfor %}
{% if page < paginator.num_pages %}
<a href="{% url 'App:main' cid=cid page=page_now|add:'1' %}" class="pagenext"><i class="ico-next"> </i></a>
{% endif %}
</div>
</div>