diango 分页

分页

最近花了很长时间在分页需求上,先是用django的分页插件,随后又用jquery来处理分页。
需求:在一个index界面中,有两个table,分别用两个按钮来控制,我们要对着两个table来进行分页处理。
开始的做法
后台:设置limit分页参数——>获取数据——>根据分页参数拆分数据——>数据传至前台
# 分页,每页显示5个 limit = 5 paginator = Paginator(bugs_message, limit) page_b = request.GET.get('page') try: bugs_message = paginator.page(page_b) except PageNotAnInteger: # 如果页码不是整数,则显示第一页 bugs_message = paginator.page(1) except EmptyPage: # 页码超出范围,则显示最后一页 bugs_message = paginator.page(paginator.num_pages)
前台:django自带的分页插件,获取上下页,并发送链接,**注:**链接中的page参数(是返回后台那个page)

<tr>
<td colspan="6">
                            <span class="step-links">
                            {% if bugs_message.has_previous %}<!--判断是否还有上一页-->
                                <a href="?b-page=1">&laquo首页</a>
                                <a href="?b-page={{ bugs_message.previous_page_number }}"
                                >上一页</a>
                            {% endif %}
                            </span>
                            <span class="current">
                                第 {{ bugs_message.number }} 页
                            </span>
                            {% if bugs_message.has_next %}
                                <span><a href="?b-page={{ bugs_message.next_page_number }}">下一页</a>
                                <a href="?b-page={{ bugs_message.paginator.num_pages }}">尾页</a>
                            {% endif %}</span></td></tr>

**详细说明:**此分页是用django中Paginatormo模块来做,走的流程:
前台点击分页按钮——>发送href链接——>后台获取page参数——>调取数据——>返回前台。
**此处遇到的问题:**因为是双table,所以在分页会有两个问题:
一:不管你点击的是哪个table的上下页,两个table同时会进行页面变化。
二:上下页变换后都会首先跳到第一个table界面去,而不是在当前table界面进行页面变化。
解决:
问题一:前台
1、将分页分为两份,分别放入两个table中(原先做法:直接放在两个table外面)
2、在href链接上增加参数,href="?*b-*page=1,根据不同的分页请求设置不同的href参数,那传到后台参数不同,就可以别进行处理。
后台:
获取到前台传的分页参数,进行不同的处理:

paginator = Paginator(bugs_message, limit)
        page_b = request.GET.get('b-page')
        try:
            bugs_message = paginator.page(page_b)
        except PageNotAnInteger:  # 如果页码不是整数,则显示第一页
            bugs_message = paginator.page(1)
        except EmptyPage:  # 页码超出范围,则显示最后一页
            bugs_message = paginator.page(paginator.num_pages)
        # demand分页
        paginator_d = Paginator(demand_message, limit)
        page_d = request.GET.get('d-page')
        try:
            demand_message = paginator_d.page(page_d)
        except PageNotAnInteger:  # 如果页码不是整数,则显示第一页
            demand_message = paginator_d.page(1)
        except EmptyPage:  # 页码超出范围,则显示最后一页
            demand_message = paginator_d.page(paginator_d.num_pages)

问题二:只在前台进行了处理,思路:获取发送的url——>对url中的参数进行判定——>将对应的table隐身。

var params = window.location.href;
        // alert('params:',r);
        console.log('url:', params);
        if (params.includes('b-')) {
            console.log('b-');
            document.getElementById('t2').style.display='none';
        }
        else if (params.includes('d-')) {
            console.log('d-');
            document.getElementById('t1').style.display='none';
            document.getElementById('t2').style.display='block';
        }

这样就解决了自己所有的问题。
**总结:**在做此分页是,自己对于django中分页的插件,流程等没有了解清楚,导致一度想要放弃使用这个方法而直接使用jquery的分页去处理。以后再使用一个新东西时,要先了解下这个方法。
这里还想记录下自己使用jquery,做的分页的代码:

			<tr><td colspan="6">
               <a><span id="spanFirst">首页</span></a>
                <a><span id="spanPre">上一页</span></a>
                第<span id="spanPageNum"></span>页
                <a><span id="spanNext">下一页</span> </a>
                <a><span id="spanLast">尾页</span></a>
            </td></tr>
<script>
var trs = $("#t1 tr");
        var pagesize = 5;
        var curr = 1;
        var currRow = pagesize * curr;
        var allPage = Math.ceil(trs.length / pagesize);
        //页面初始状态
        $(document).ready(function () {
            hideTab();
            curr = 1;
            $("#table1 tr:lt(3)").css("display", "block");
            $("#spanTotalPage").text(allpage);
            $("#spanPageNum").text(curr);
            $("#count").css({"width": "20px", "border-radius": "5px"});
        });
       
        // 绑定下一页点击事件
        function spanNext() {
            alert("下一页");
            {#hideTab();#}
            if (curr > allPage - 1) {
                curr = allPage;
            } else {
                curr++;
            }
            alert(curr);
            var currRow = pagesize * curr;
            $.each(trs, function (index) {
                if (index < currRow && index >= currRow - pagesize) {
                    var that = this;
                    that.style.display = "block";
                }
            });
            $("#spanPageNum").text(curr);
        }
        $("#spanNext").bind("click", spanNext);
        //为上一页 绑定点击事件
        function spanPre() {
            alert("上一页");
            {#hideTab();#}
            if (curr < 2) {
                curr = 1;
            } else {
                curr--;
            }
            var currRow = pagesize * curr;
            $.each(trs, function (index) {
                if (index < currRow && index >= currRow - pagesize) {
                    var that = this;
                    that.style.display = "block";
                }
            });
            $("#spanPageNum").text(curr);
        }
        $("#spanPre").bind("click", spanPre);
        //为第一页绑定点击事件
        function spanFirst() {
            {#hideTab();#}
            console.log("第一页");
            curr = 1;
            {#var currRow = pagesize * curr;#}
            $.each(trs, function (index) {
                if (index < currRow && index >= currRow - pagesize) {
                    this.style.display = "block";
                }
            });
            $("#spanPageNum").text(curr);
        }
        $("#spanFirst").bind("click", spanFirst);
        //为最后一页绑定点击事件
        function spanLast() {
            {#hideTab();#}
            {#curr = allpage;#}
            {#var currRow = pagesize * curr;#}
            console.log("最后一页");
            alert("最后一页");
            $.each(trs, function (index) {
                if (index < currRow && index >= currRow - pagesize) {
                    this.style.display = "block";
                }
            });
            $("#spanPageNum").text(curr);
        }
        $("#spanLast").bind("click", spanLast);

</script>      

*思路:*获取table下的tr——>进行分页——>绑定上下页等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值