django 将不会将得到的html代码自动转化
from django.utils.html import format_html html =‘‘‘ <a href=‘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="{% url "article" article.id %}" target="_blank">{{ article.title }}</a> {%endfor%} </div> <div class="page"> <a href="{% url ‘index‘ %}">首页</a> {% if contacts.has_previous %} <a href="?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="?page={{ pagenum }}">{{ pagenum }}</a> {% endif %} {% endif %} {% endfor %} {% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">下页</a> {% endif %} <a href="?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/
时间: 2024-10-17 15:14:54