在blog中,列出所有文章,需要分如下几步:
第一步:视图函数
from django.core.paginator import Paginator, InvalidPage, EmptyPage, PageNotAnInteger def index(request): try: f = open("a.txt", "r") except Exception as e: logger.error(e) category_list = Category.objects.all() # 文章分页 all_article = Article.objects.all() paginator = Paginator(all_article, per_page=2) page_index = int(request.GET.get('page', 1)) try: article_list = paginator.page(page_index) except (InvalidPage, EmptyPage, PageNotAnInteger) as e: article_list = paginator.page(1) return render(request, "index.html", {"category_list":category_list, "article_list":article_list})
django自带分页器Paginator,需要两个参数:数据列表,每页大小。
第二步:页面
{% extends "main/base.html" %} {% load staticfiles %} {% block content %} <div class="topnews"> <h2>最新文章</h2> {% for article in article_list %} <div class="blogs"> <ul> <h3><a href="/">{{ article.title }}</a></h3> <p>{{ article.description }}</p> <p class="autor"> <span class="lm f_l"> <a href="/"> {% for tag in article.tag.all %}{{ tag.name }} {% endfor %} </a> </span> <span class="dtime f_l">{{ article.date_publish|date:'Y-m-d' }}</span> <span class="viewnum f_r">浏览(<a href="/">{{ article.click_count }}</a>)</span> <span class="pingl f_r">评论(<a href="/">{{ article.comment_set.count }}</a>)</span></p> </ul> </div> {% endfor %} </div> {#分页#} <div id="pagination"> <ul id="pagination-flickr"> {% if article_list.has_previous %} <li class="previous"><a href="?page={{ article_list.previous_page_number }}">«上一页</a></li> {% else %} <li class="previous-off">«上一页</li> {% endif %} <li class="active">{{ article_list.number }}/{{ article_list.paginator.num_pages }}</li> {% if article_list.has_next %} <li class="next"><a href="?page={{ article_list.next_page_number }}">下一页 »</a></li> {% else %} <li class="next-off">下一页 »</li> {% endif %} </ul> </div> {% endblock %}
重点使用了django的分页器。