直接将模型数据显示到表格中,并进行排序和分页的Django

直接将模型数据显示到表格中,并进行排序和分页的Django

在Django中,将模型数据显示在表格中是一个很常见的需求。而且,通常需要支持排序和分页功能。本文将介绍如何使用Django来实现这个功能。

阅读更多:Python 教程

创建Django项目和应用

首先,我们需要创建一个新的Django项目和应用。打开终端,进入一个你想保存项目的目录,执行如下命令:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

这里创建了一个叫做myproject的Django项目,和一个叫做myapp的Django应用。

定义模型

接下来,我们需要定义一个模型,这个模型表示员工信息,包含以下字段:

字段名 类型 描述
name char(20) 员工姓名
age int 员工年龄
salary float 员工薪水(万元)

myapp/models.py文件中添加如下代码:

from django.db import models

class Employee(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    salary = models.FloatField()

    def __str__(self):
        return self.name

这里定义了一个名为Employee的模型,使用CharFieldIntegerFieldFloatField三个字段来表示员工姓名、年龄和薪水。其中,CharFieldmax_length参数指定字符串的最大长度。模型的__str__方法返回员工的姓名。

创建数据库表

定义好了模型之后,我们需要执行以下两个命令来创建数据库表:

python manage.py makemigrations
python manage.py migrate

第一条命令会自动生成一个迁移文件,该文件描述了对数据库模型的修改。第二条命令用于将这些修改应用到数据库中。

创建视图

接下来,我们需要创建一个视图,用于显示员工信息。在myapp/views.py中添加如下代码:

from django.views.generic import ListView
from myapp.models import Employee

class EmployeeListView(ListView):
    model = Employee
    template_name = 'employee_list.html'
    context_object_name = 'employee_list'
    paginate_by = 10

这里创建了一个EmployeeListView类,继承自ListView类。该类定义了模型、模板、内容对象和每个页面包含的项数等属性。视图使用名为employee_list.html的模板来呈现员工信息。

创建模板

现在,我们需要创建employee_list.html模板,用于显示员工信息。在myapp/templates目录中,创建一个名为employee_list.html的文件,将以下代码添加到其中:

{% extends base.html %}

{% block content %}
<h1>员工信息</h1>

<table>
  <thead>
    <tr>
      <th>编号</th>
      <th><a href="?sort=name">姓名</a></th>
      <th><a href="?sort=age">年龄</a></th>
      <th><a href="?sort=salary">薪水</a></th>
    </tr>
  </thead>
  <tbody>
    {% for employee in employee_list %}
      <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ employee.name }}</td>
        <td>{{ employee.age }}</td>
        <td>{{ employee.salary }}</td>
      </tr>
    {% endfor %}
  </tbody>
</table>

{% include "pagination.html" with page=page_obj %}
{% endblock %}

该模板包含一个table元素,用于显示员工信息。表格头部包含“姓名”、“年龄”和“薪水”三个字段,并且每个字段都可以点击进行排序。每个表格行包含了员工的姓名、年龄和薪水。同时,我们还将pagination.html模板包含在最后,用于分页。

创建分页模板

我们还需要创建pagination.html模板,用于分页。在myapp/templates目录中,创建一个名为pagination.html的文件,将以下代码添加到其中:

{% if is_paginated %}
  <div class="pagination">
    <span class="step-links">
      {% if page_obj.has_previous %}
        <a href="?page=1">« 第一页</a>
        <a href="?page={{ page_obj.previous_page_number }}">上一页</a>
      {% endif %}

      <span class="current-page">
        第 {{ page_obj.number }} 页,共 {{ page_obj.paginator.num_pages }} 页
      </span>

      {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">下一页</a>
        <a href="?page={{ page_obj.paginator.num_pages }}">最后一页 »</a>
      {% endif %}
    </span>
  </div>
{% endif %}

pagination.html模板包含一个分页区域,其中包含“第一页”、“上一页”、“下一页”和“最后一页”四个链接。每个链接将带有相应的页数参数。同时,在分页区域顶部展示了当前页码和总页数。

配置URL

最后,我们需要在myproject/urls.py中配置URL,将EmployeeListView视图与URL相连。打开该文件,将以下代码添加到其中:

from django.urls import path
from myapp.views import EmployeeListView

urlpatterns = [
    path('employee/list/', EmployeeListView.as_view(), name='employee_list'),
]

这里创建了一个名为employee_list的URL,将EmployeeListView视图与之相连。

运行项目

现在,我们可以运行Django项目,在网页中查看员工信息了。在终端中执行如下命令:

python manage.py runserver

这里运行了Django开发服务器,监听端口8000。在浏览器中打开http://localhost:8000/employee/list/,即可看到员工信息表格,并可以进行排序和分页。

结论

通过以上步骤,我们可以很容易地在Django中将模型数据显示在表格中,并添加排序和分页功能。这种方法可以应用于各种情况,使得数据展示更加美观和便捷。同时,我们可以结合其他Django组件,如FormFilter等,实现更加丰富的功能。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程