首页 > 代码库 > django分页功能,templatetags的应用

django分页功能,templatetags的应用

django 将不会将得到的html代码自动转化

from django.utils.html import format_html

html =‘‘‘ <a href=http://www.mamicode.com/‘http://www.china.cn‘>中国</a>‘‘‘

format_html(html)  

django分页

分页功能基本操作

from django.core.import Paginator

li=[11,12,13,22,24,25]
p=Paginator(li,3)  #将li传入,每页显示3条
p.count  6 共有多少个元素
p.num_pages 2 共有多少页
p.page_range (1,3) 页码范围
p1=p.page(1)  取第一页
p2=p.page(2)  取第二页
p1.object_list [11,12,13]  页码的元素列表
p1.number  1 查询自己是多少页
p1.has_next()  True  是否有下一页
p1.has_previous() False 是否有上一页
p1.has_other_pages() True 是否有其他页
p1.next_page_number() 2  下一页的页码
p1.previous_page_number() 上一页的页码

 

 后端代码 views.py

from django.shortcuts import render
from django.core.paginator import Paginator,EmptyPage, PageNotAnInteger
from app import models

def index(request):
    article_obj = models.Aticle.objects.all()
    paginator = Paginator(article_obj,5)
    page = request.GET.get(‘page‘)#取到url的page值 www.xxx.com/?page=xxx
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        #如果不是page不是数字
        contacts = paginator.page(1)
    except EmptyPage:
        #如果page不存在 即超出范围
        contacts = paginator.page(paginator.num_pages)
    return render(request,‘duanzi/index.html‘,{‘contacts‘: contacts,})

前端代码

技术分享
{% load tags %}
<!DOCTYPE html>
<html>
    <head> <title>django web</title>
    </head>
    <div class=‘content‘>
{% for article in contacts %}
<a href="http://www.mamicode.com/{% url"article" article.id %}" target="_blank">{{ article.title }}</a>
{%endfor%}
    </div>
    <div class="page">
    <a href="http://www.mamicode.com/{% url ‘index‘ %}">首页</a>
    {% if contacts.has_previous %}
    <a href="http://www.mamicode.com/?page={{ contacts.previous_page_number }}">上页</a>
    {% endif %}
    {% for pagenum in contacts.paginator.page_range %}
        {% www ‘pagenum contacts.number‘ as Y %}
        {% if Y %}

            {% if pagenum == contacts.number %}
                <span class="current">{{ pagenum }}</span>
                {% else %}
                <a href="http://www.mamicode.com/?page={{ pagenum }}">{{ pagenum }}</a>
            {% endif %}
        {% endif %}
    {% endfor %}
    {% if contacts.has_next %}
    <a href="http://www.mamicode.com/?page={{ contacts.next_page_number }}">下页</a>
    {% endif %}
    <a href="http://www.mamicode.com/?page={{ contacts.paginator.num_pages }}">尾页</a>
</div>
前端代码

 

在app在新建templatetags模块文件夹,再新建一个tags.py文件

 tags.py文件代码

from django import template

register = template.Library()

@register.simple_tag
def www(pagenum,num):
    if -4<=pagenum-num<=4:
        return True
    else:
        return False


templetatag 主要用到两个类

@register.filter  作为过滤方法使用 只能添加一个参数 

模板中的应用方法为{% args | 函数名 %}

@register.simple_tag  可以添加两个参数

模板中的应用方法为{% 函数名 参数1 参数2 }

扩展方法: as方法
 {% 函数名 参数1 参数2 as y }  赋值为x 同python as方法一样

使用时在html文件 使用load方法{% load tags %}  tags:文件名

 官方手册

https://docs.djangoproject.com/en/1.9/topics/pagination/

https://docs.djangoproject.com/es/1.9/howto/custom-template-tags/

django分页功能,templatetags的应用