Python+Django+JQ easyui实现数据表格分页展示(基于前后端不分离)

前文

  在用Django写web时,有时就仅仅需要从数据库查询出数据,然后在前端展示,但是又要分页,涉及的前后端还是蛮多的,这边介绍基础的html+Django以及用JQ的easyui框架+Django来实现基础的表格分页展示。

table+Django

  Django的后端代码相对简单很多,逻辑就是从数据库取出数据,然后用Django自带的paginator进行分页(因为Django的paginator对象封装了获取上一页和下一页的方法,所以可以在模版轻松使用),这边结合代码来说明。

from django.core.paginator import Paginator, Page, EmptyPage, PageNotAnInteger 
#从Django自带的paginator模块插入类
contact_list = models.objects.all() #这边的model指代数据表
paginator = Paginator(contact_list, 20) #20是每页显示的数量,把数据库取出的数据生成paginator对象,并指定每页显示的数量
page = request.GET.get('page') #从查询字符串获取page的当前页数
if page: #判断:获取当前页码的数据集,这样在模版就可以针对当前的数据集进行展示
    data_list = paginator.page(page).object_list
else:
    data_list = paginator.page(1).object_list
try:  #实现分页对象,分别判断当页码存在/不存在的情况,返回当前页码对象
    page_object = paginator.page(page)
except PageNotAnInteger:
    page_object = paginator.page(1)
except EmptyPage:
    page_object = paginator.page(paginator.num_pages)
return render(request, "websql/usersqllog.html", {
    'page_object':page_object,
    'data_list':data_list
}) #返回给模版当前页码对象和当前页码的数据集

  这边后端代码基本实现了,用基础的html+css来实现一个简陋的数据表格呈现:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Titlename</title>
</head>
<style>
    ul{
        list-style: none;
        margin:0px;
        padding:0px;
        width:auto;
    }
    ul li{
        float:left;
        margin-top:10px;
        padding:10px;
        border-style: solid;
        border:1px solid;
    }
</style>
<body>
    <a href="{% url 'index' %}">
        <button>返回首页</button>
    </a>
    <div>
        <table border="1" cellspacing="1" cellpadding="1" >
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>ip</th>
                <th width="200px">time</th>
            </tr>

            {% for data in data_list %}
                <tr>
                    <td>{{ data.id }}</td>
                    <td>{{ data.name }}</td>
                    <td>{{ data.ip }}</td>
                    <td width="200px">{{ data.time }}</td>
                </tr>
            {% endfor %}

        </table>
        <ul class="pagination">
            {% if page_object.has_previous %}
                <li>
                <a href="?page={{ page_object.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
                </li>
            {% endif %}

           {% for pg in page_object.paginator.page_range %}
            {% if page_object.number == pg %}
            <li class="active"><a href="?page={{ pg }}">{{ pg }}</a></li>
            {% else %}
            <li><a href="?page={{ pg }}">{{ pg }}</a></li>
            {% endif %}
            {% endfor %}
            {% if page_object.has_next %}
                <li>
                    <a href="?page={{ page_object.next_page_number }}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
            {% endif %}
        </ul>
    </div>

</body>
</html>

  做完后,出现的表格大概是这样的:
在这里插入图片描述
  数据都是测试的数据,如果要实现一个简单的表格展示,那上面这种就够用了(给自己看,就不用在意那么多了)。关于模版的table就是简单的html,就不多说了,关于page的切换,就是利用了page对象的previous_page_number(上一页)、next_page_number (下一页)、paginator.page_range(页数范围),当页面点击对应的页码时,就通过if判断当前的页码,找到了则跳转对应的页面,同时通过url发给django后端,再对应的从数据库取出数据。

easyui+Django

  用table实现的页面实在有点拿不出手,这时候可以考虑用easyui来实现,关于easyui的入门教程:easyui入门。这边简单用easyui的datagrid来实现表格显示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titlename</title>
    <link rel="stylesheet" type="text/css" href="/static/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="/static/easyui/themes/icon.css">
    <script type="text/javascript" src="/static/js/jquery.js"></script>
    <script type="text/javascript" src="/static/easyui/jquery.easyui.min.js"></script>
</head>
<style>
    ul{
        list-style: none;
        margin:0px;
        padding:0px;
        width:auto;
    }
    ul li{
        float:left;
        margin-top:10px;
        padding:10px;
        border-style: solid;
        border:1px solid;
    }
</style>
<body class="easyui-layout" style="font-size:14px;">
    <div style="padding:5px;background:#fafafa;width:200px;border:1px solid #ccc;margin-left: 10px">
        <a href="{% url 'index' %}" class="easyui-linkbutton" data-options="iconCls:'icon-back'">返回首页</a>
    </div>
    <div style="margin-left:10px;">
    <table id="dg" class="easyui-datagrid" title="Titlename" style="width:1000px;height:560px"
            data-options="singleSelect:true,collapsible:true">
        <thead>
            <tr>
                <th field="id" width="50px">序号</th>
                <th field="name" width="100px">用户名</th>
                <th field="address_ip" width="200px">访问的ip地址</th>
                <th field="create_time" width="400px">访问时间</th>
            </tr>
        </thead>
        <tbody>
        {% for data in data_list %}
            <tr>
                <td width="50px">{{ data.id }}</td>
                <td width="100px">{{ data.name }}</td>
                <td width="100px">{{ data.ip }}</td>
                <td width="400px">{{ data.time }}</td>
            </tr>
        {% endfor %}
        </tbody>

    </table>
    </div>
    <div style="margin-left:10px;">
        <ul class="pagination">
            {% if page_object.has_previous %}
                <li>
                <a href="?page={{ page_object.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
                </li>
            {% endif %}

           {% for pg in page_object.paginator.page_range %}
            {% if page_object.number == pg %}
            <li class="active"><a href="?page={{ pg }}">{{ pg }}</a></li>
            {% else %}
            <li><a href="?page={{ pg }}">{{ pg }}</a></li>
            {% endif %}
            {% endfor %}
            {% if page_object.has_next %}
                <li>
                    <a href="?page={{ page_object.next_page_number }}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
            {% endif %}
        </ul>
    </div>
</body>
</html>

表格如下:
在这里插入图片描述
  相对来说,表格和按钮都做了一定的优化,并且这样的表格可以支持滚轮,当然还有很多datagrid的特性,感兴趣的同学可以去了解,这边的实现就是基于纯html+css,而不用js,实际上datagrid的实现配合js可以有更多强大的功能。这边要注意的是,在easyui的table的tr里的field一定要和下方data的引用字段互相呼应,当时没注意到这点,导致数据一直显示不出来~

总结

  关于easyui的JQ框架,我也在不断的入门学习,datagrid的很多强大的功能也有待发掘~

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一种流行的编程语言,有非常丰富的库和框架可供使用。而Django是一个基于Python的开发框架,用于快速搭建Web应用程序。Vue是一种流行的JavaScript框架,用于构建用户界面。 当我们要搭建一个前后端分离的项目时,可以使用PythonDjango框架和Vue框架实现。下面是大致的步骤: 1. 对于后端,我们可以使用Django框架来搭建RESTful API。首先,创建一个新的Django项目并设置好相关配置。然后,定义数据模型和数据库表,可以使用Django的ORM(对象关系映射)来简化数据库操作。接下来,创建视图函数来处理不同的API请求,可以通过序列化器将模型数据转换为JSON格式进行传输。最后,设置URL路由映射和权限控制,确保API的安全性和可访问性。 2. 对于前端,我们可以使用Vue框架来构建用户界面。首先,创建一个新的Vue项目并安装所需的依赖项。然后,创建组件来管理不同的页面和功能模块。在组件中,可以使用Vue的数据绑定和计算属性等功能来简化数据处理和状态管理。同时,可以使用Vue Router来管理页面之间的导航和路由,以及使用axios库来发送API请求和接收响应。 3. 在前后端之间进行通信时,前端通过axios发送HTTP请求到后端的API接口,后端处理请求并返回相应的数据。前端可以根据接口的返回结果来更新界面和展示数据。 总的来说,使用PythonDjango框架和Vue框架可以很好地实现前后端分离的项目。Django提供了强大的后端支持,可以快速搭建API接口,而Vue框架则提供了便捷的前端开发环境,可以轻松构建用户界面。通过这种搭配,我们可以高效地开发出功能完善、交互流畅的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值