Django自定义分页、bottle

一、使用django实现之定义分页

1、自定义分页在django模板语言中,通过a标签实现;

2、前段a标签使用<a href="/user_list/?page=1">1</a>,将page的值传送到函数/user_list/中,后端在user_list中通过request.GET.get(‘page‘,1)获取当前页;

3、从数据库中获取特定行的数据,使用result = models.UserList.objects.all()[start:end]获取,start和end分别表示开始和结束的行;

3、自定义分页显示到模板语言中的html/css/js的字符串,在django view中,通过python字符串拼接生成;

4、获取分页的起始页,结束页,以及当前页居中等功能,抽象出来,放到一个类中实现;

5、Django默认认为返回给前段的字符串是不安全的(XSS),所有直接返回的html中,会显示为原始的字符串,可以通过在前段使用|safe或者在后端使用后make_safe实现将字符串能够让浏览器进行解析;

6、分页优化需要考虑:让当前页居中,增加上一页和下一页功能;

#-*- coding:utf-8 -*-
from django.shortcuts import render
from app01 import  models
from django.utils.safestring import mark_safe

# Create your views here.

class Pager(object):
    def __init__(self,current_page):
        self.current_page = int(current_page)
    @property
    def start(self):
        return (self.current_page -1)*10

    @property
    def end(self):
        return self.current_page*10

    def page_str(self,all_item,base_url):
        all_page,div = divmod(all_item,10)
        if div>0:
            all_page+=1

        pager_list = []

        if all_page <=11:   #分页功能优化,将当前页居中,并且从1开始
            start =1
            end = all_page
        else:
            if self.current_page <=6:
                start = 1
                end = 12
            else:
                start = self.current_page-5
                end = self.current_page +6
                if self.current_page +6 >all_page:
                    start =all_page -11
                    end = all_page +1
        for i in range(start,end):   #让当前页永远居中
            if  i == self.current_page:
                temp = ‘<a style="color:red;font-size:26px;" href="%s%d">%d</a>‘ %(base_url,i,i)
            else:
                temp = ‘<a href="%s%d">%d</a>‘ %(base_url,i,i)
            pager_list.append(temp)

        #增加上一页和下一页功能
        #上一页
        if self.current_page >1:
            pre_page = ‘<a href="%s%d">上一页</a>‘ %(base_url,self.current_page-1)
        else:
            pre_page = ‘<a href="javascript:void(0);">上一页</a>‘

        if self.current_page >=all_page:
            next_page = ‘<a href="javascript:void(0);">下一页</a>‘
        else:
            next_page = ‘<a href="%s%d">下一页</a>‘ %(base_url,self.current_page+1)
        pager_list.insert(0,pre_page)
        pager_list.append(next_page)
        return mark_safe("".join(pager_list))   #在后端标记html是安全的,前端标记为安全的使用page_str|safe

def user_list(request):
    # for item in range(100,500):
    #       temp = {‘username‘:"name %d" %item,‘age‘:item}
    #       models.UserList.objects.create(**temp)
    print models.UserList.objects.all().count()
    #每页显示10条
    #向用户显示页数
    current_page = request.GET.get(‘page‘,1)
    # print current_page
    # current_page = int(current_page)
    # start = (current_page-1)*10
    # end = current_page*10
    # result = models.UserList.objects.all()[start:end]
    page_obj = Pager(current_page)
    result = models.UserList.objects.all()[page_obj.start:page_obj.end]
    print result.query   #对应的sql语句
    all_item = models.UserList.objects.all().count()
    # all_page,div = divmod(all_item,10)
    # if div>0:
    #     all_page+=1
    #
    # pager_str = ""
    # for i in range(1,all_page+1):
    #     temp = ‘<a href="/user_list/?page=%d">%d</a>‘ %(i,i)
    #     pager_str +=temp
    pager_str = page_obj.page_str(all_item,"/user_list/?page=")
    return render(request,‘user_list.html‘,{‘result‘:result,‘pager_str‘:pager_str})

模板语言文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        a{
            padding: 5px;
        }
    </style>
</head>
<body>
    <table>
        {% for line in result %}
        <tr>
            <td>{{ line.username }}</td>
            <td>{{ line.age }}</td>
        </tr>
        {% endfor %}
    </table>

    <div>
{#        <a href="/user_list/?page=1">1</a>#}
{#        <a href="/user_list/?page=2">2</a>#}
{#        <a href="/user_list/?page=3">3</a>#}
{#        <a href="/user_list/?page=4">4</a>#}
{#        {{ pager_str|safe }}#}
        {{ pager_str }}
{#        一般对于返回到网页的字符串,django认为是不安全的,为了防止xss攻击,会将返回的字符串不作解析,以原始字符串的格式返回,使用safe表示我们认为返回的字符串是安全的,可以被浏览器解析#}
    </div>
</body>
</html>

二、Bottle

1、只有一个文件,但是至少依赖于两个部件:wsgi和模板引擎;

2、只有在运行时依赖别的模块;

bottle路由系统查看银角大王博客

时间: 2024-10-13 00:07:18

Django自定义分页、bottle的相关文章

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

Django 自定义分页类

分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypage page_obj = mypage.Page(total_num, current_page, 'publisher_list') publisher_list = data[page_obj.data_start:page_obj.data_end] page_html = page_obj.

DJANGO 自定义分页组件

第一次在码云上面分享代码片段,记录一下: https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90 class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 传入: # -所有数据的个数 totalCount self.totalCount = totalCount # -当前页 curren

python/Djangof分页与自定义分页

python/Djangof分页与自定义分页 Django分页 1 ##============================================分页======================================================= 2 # current_pagc = request.GET.get('page') 3 # from django.core.paginator import Paginator,Page 4 # # result = m

Django学习手册 - 初识自定义分页

核心: <a href='http://127.0.0.1:8000/index-%s'>%s<a> 自定义分页 1.前端处理字符 后端的字符  return render(request,"index.html",{"l传到前端的数据":list}) {{ 传到前端的数据 | safe}} 2.后端处理字符 导入处理的模块 from django.utils.safestring import mark_safe mark_safe(需要处

8.2 Django 分页组件替换自定义分页

Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ class Pagination(object): def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ): """ 封装分页相关数据 :par

django的分页--不全也未实现

一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输入页码(第一页.第二页...) 3.根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置 4.在数据表中根据起始位置取值,页面上输出数据 需求又来了,需要在页面上显示分页的页面.如:[上一页][1][2][3][4][5][下一页] 1.设定每页显示数据条数 2.用户输入页码(第一页.第二

Python之路【第十九篇】自定义分页实现(模块化)

自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^user_lis

Djano 自定义分页效果

Django本身提供了一个分页的类,直接导入就可以使用,不过这个方法只能在Django里面使用.武sir在大家从头写了一个自定义分页的类.这个类的实现的方法和内容基本上可以作为模板在任何语言里面使用,只需要修改对应的语法即可. pagenation.py __author__ = 'Administrator' from django.utils.safestring import mark_safe #上一篇说了,这是为了XSS的自动保护机制,为了让前端模板识别我们传递的html或者js格式字