在 views的添加
# 显示博客列表
def blog_list(request):
pages_list_all = Blog.objects.all()
# 每10页进行分页
# paginator 分页器的实例化
paginator = Paginator(pages_list_all, 2)
page_num = request.GET.get('page', 1) # 获取GET请求的内容,默认为1 获取url的页面参数(GET请求)
page_of_blogs = paginator.get_page(page_num) # 将获取的第几页的文章列表值给赋值,get方法会自动处理异常
current_page_num = page_of_blogs.number # 获取当前页码
# 页面范围 显示 分页时的 结果, 就是如果有多个分页,不完全显示,就显示4个页面
# 获取当前页码和 当前页码的前后两页
page_range = list(range( max(current_page_num-2, 1), current_page_num )) + \
list(range(current_page_num, min(current_page_num+2, paginator.num_pages) + 1))
# 加上省略页码
if page_range[0] - 1 >= 2:
page_range.insert(0, '...')
if paginator.num_pages - page_range[-1] >= 2:
page_range.append('...')
# 加上首页和尾页
if page_range[0] != 1:
page_range.insert(0, 1)
if page_range[-1] != paginator.num_pages:
page_range.append(paginator.num_pages)
context = {}
# 获取当所有的文章列表 ,两行都是
# context['blogs'] = Blog.objects.all()
context['blogs'] = page_of_blogs.object_list
# 获取当前页的文章列表 ,两行都是
context['page_of_blogs'] = page_of_blogs
context['page_range'] = page_range
# 获取文章分类列表
context['blog_types'] = BlogType.objects.all()
return render_to_response('blog/blog_list.html', context)
前端页面
{# 页面内容 #}
{% block content %}
<!-- 这里的html是一个 框框, 珊格 -->
<div class="container">
<div class="row">
<!-- 这是调珊格大小 -->
<div class="col-sm- 8 col-md-8 col-lg-10">
<div class="panel panel-default">
<div class="panel-heading"> 博客列表
<!-- 这里有个块,作为博客分类 查看的页面的调用 -->
{% block blog_list_title %}
{% endblock %}
</div>
<div class="panel-body">
{% for blog in blogs %}
<div class="blog">
<!-- url 的参数,blog_detail是urls中的别名, 后面的是点pk,与urls的path -->
<!-- 将views中的pk参数,传给urls中的前面的参数 -->
<a href="{% url 'blog_detail' blog.pk %}">
<h3>{{ blog.title }}</h3>
</a>
<ul>
<!-- 下面是分类和时间的图标 -->
<p class="blgo_info">
<span class="glyphicon glyphicon-tags" aria-hidden="true">
</span>
<a href="{% url 'blogs_with_type' blog.blog_type.pk%}">{{blog.blog_type.type_name}}
</a>
<span class="glyphicon glyphicon-time" aria-hidden="true">
</span>
{{blog.created_time|date:"Y-m-d"}}
</p>
</ul>
<p>{{ blog.content | truncatechars:100 }}</p>
</div>
{% empty %}
<div class="blog">
<h3>-- 还没有写博客, 敬请期待!--</h3>
</div>
{% endfor %}
</div>
</div>
<!-- 显示 所有的页数 -->
<div class="paginator">
<ul class="pagination">
<!-- 上一页 -->
<li>
{% if page_of_blogs.has_previous %}
<!-- 链接到上一页, 函数是返回上一页的页码 -->
<a href="?page={{page_of_blogs.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
{% else %}
<!-- 不能点 -->
<span aria-hidden="true">«</span>
{% endif %}
<!-- 全部页码 -->
<!-- 如果是当前页,当前页就不能点,而且...不能点 -->
</li>
{% for page_num in page_range %}
{% if page_num == page_of_blogs.number %}
<!-- 这里的链接 是对应发的前面views中的GET请求 -->
<li class="active"><span>{{page_num}}</span></li>
{% else %}
{% if page_num == '...' %}
<li><span>{{page_num}}</span></li>
{% else %}
<li><a href="?page={{ page_num }}">{{page_num}}</a></li>
{% endif %}
{% endif%}
{% endfor %}
<li>
<!-- 下一页 -->
{% if page_of_blogs.has_next %}
<a href="?page={{page_of_blogs.next_page_number}}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
{% else %}
<span aria-hidden="true">»</span>
{% endif %}
</li>
</ul>
<p></p>
<!-- 添加过滤器,统计有多少篇博客。 -->
<!-- (一共有{{ blogs | length}}篇博客) -->
<p>
当前为{{page_of_blogs.number}}页
共有{{page_of_blogs.paginator.num_pages}}页
共有{{ page_of_blogs.paginator.count}}篇博客
</p>
</div>
</div>