码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一周学会Django5 Python Web开发-Django5列表视图ListView


    锋哥原创的Python Web开发 Django5视频教程:

    2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计27条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV14Z421z78C/为了实现快速开发,Django提供了视图类功能,封装了视图开发常用的代码,这种基于类实现的响应与请求称为CBV ( Class Base Views),我们先介绍列表视图ListView,该视图类可以将数据库表的数据以列表的形式显示到页面,常用于数据的查询和展示。

    首先为了得到数据库数据,我们先定义模型,来映射数据库表;

    models.py里定义StudentInfo类:

    1. from django.db import models
    2. # Create your models here.
    3. class StudentInfo(models.Model):
    4. id = models.AutoField(primary_key=True)
    5. name = models.CharField(max_length=20)
    6. age = models.IntegerField()
    7. class Meta:
    8. db_table = "t_student"

    然后我们执行: python manage.py makemigrations 生成数据库迁移文件

    所谓的迁移文件, 是类似模型类的迁移类,主要是描述了数据表结构的类文件;

    再执行:python manage.py migrate 执行迁移文件,同步到数据库中

    注意:生成的表名默认为:app名_定义的表名,可通过db_table 指明数据库表名。

    我们会看到 数据库t_student自动生成了:

    我们输入一些测试数据:

    1. insert into t_student VALUES(null,'张三1',20);
    2. insert into t_student VALUES(null,'张三2',21);
    3. insert into t_student VALUES(null,'张三3',22);
    4. insert into t_student VALUES(null,'张三4',23);
    5. insert into t_student VALUES(null,'张三5',24);
    6. insert into t_student VALUES(null,'张三6',25);
    7. insert into t_student VALUES(null,'张三7',26);
    8. insert into t_student VALUES(null,'张三8',27);
    9. insert into t_student VALUES(null,'张三9',28);
    10. insert into t_student VALUES(null,'张三10',29);
    11. insert into t_student VALUES(null,'张三11',30);
    12. insert into t_student VALUES(null,'张三12',31);

    要使用 ListView,需要继承它并设置一些属性。以下属性是最常用的:

    • model:指定要使用的模型。

    • template_name:指定要使用的模板名称。

    • context_object_name:指定上下文变量名称,默认为 object_list。

    • paginate_by:指定分页大小。

    • extra_context:设置模型外的数据

    在views.py里,我们可以定义List类:

    1. class List(ListView):
    2. # 设置模版文件
    3. template_name = 'student/list.html'
    4. # 设置模型外的数据
    5. extra_context = {'title': '学生信息列表'}
    6. # 查询结果集
    7. queryset = StudentInfo.objects.all()
    8. # 每页展示5条数据
    9. paginate_by = 5
    10. # 设置上下文对象名称
    11. context_object_name = 'student_list'

    除了设置属性之外,还可以重写 ListView 中的方法以进行自定义。以下是一些常见的方法:

    • get_queryset():返回要在视图中使用的查询集合。这里可以对查询集合进行筛选、排序等操作。

    • get_context_data():返回要在模板上下文中使用的变量。这里可以添加额外的变量,如表单、过滤器等。

    urls.py里,我们定义映射:

    path('student/list', helloWorld.views.List.as_view())

    在模版页面,Django 给我们提供了分页的功能:Paginator和Page类都是用来做分页的。

    1. # Paginator常用属性和方法
    2. 1.`count`: 总共有多少条数据。
    3. 2.`num_pages`: 总共有多少页。
    4. 3.`page_range`:页面的区间。比如有三页,那么就是```range``(``1``,``4``)`。
    1. # Page常用属性和方法:
    2. 1.`has_next`: 是否还有下一页。
    3. 2.`has_previous`: 是否还有上一页。
    4. 3.`next_page_number`: 下一页的页码。
    5. 4.`previous_page_number`: 上一页的页码。
    6. 5.`number`: 当前页。
    7. 6.`start_index`: 当前页的第一条数据的索引值。
    8. 7.`end_index`: 当前页的最后一条数据的索引值。

    我们在templates下新建student目录,再新建list.html

    1. "en">
    2. "UTF-8">
    3. {{ title }}
    4. {{ title }}

    5. "1">
    6. {% for student in student_list %}
    7. {% endfor %}
    8. 编号姓名年龄
      {{ student.id }}{{ student.name }}{{ student.age }}

    9. {% if is_paginated %}
    10. {% if page_obj.has_previous %}
    11. "/student/list?page={{ page_obj.previous_page_number }}">上一页
    12. {% endif %}
    13. {% for current in paginator.page_range %}
    14. {% if current == page_obj.number %}
    15. "/student/list?page={{ current }}">"blue">{{ current }}
    16. {% else %}
    17. "/student/list?page={{ current }}">{{ current }}
    18. {% endif %}
    19. {% endfor %}
    20. {% if page_obj.has_next %}
    21. "/student/list?page={{ page_obj.next_page_number }}">下一页
    22. {% endif %}
    23. {% endif %}

    测试,浏览器输入:http://127.0.0.1:8000/student/list

    点击下一页:

    运用ListView列表视图开发,是不是非常容易,方便。

  • 相关阅读:
    Nature|高性能柔性纤维电池 (柔性智能织物/可穿戴电子/界面调控/柔性电池/柔性电子)
    【SpringBoot】mockito+junit 单元测试
    物联网为智慧水资源管理提供的三种创新思路
    Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务
    OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍
    为特征向量数据(1D数组)叠加噪声实现数据增强
    javascript中如何将多个数组的一个元素相加求和
    metastore启动问题
    使springAOP生效不一定要加@EnableAspectJAutoProxy注解
    【面试经典150 | 哈希表】两数之和
  • 原文地址:https://blog.csdn.net/caoli201314/article/details/136315112
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号