Django基础入门④:数据表显示和Django模板详讲

news2024/9/28 3:22:52

Django基础入门④:数据表显示和Django模板详讲

  • 数据表显示
    • 字段显示
    • 表单显示分块
    • 内联显示
    • 列表显示
    • 搜索栏目创建
    • 筛选
    • 排序
    • 分页
    • 导入导出
  • Django模板
    • 什么是模板
    • 模板使用
    • render方法详解

🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人
🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读!
🎁🎁:文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。


数据表显示

字段显示

📌在数据库字段中,有一些数据是不需要显示给后台的,可以将字段进行指定的显示,来整洁页面。

from django.contrib import admin  # Django自动在admin.py文件中导入

from index.models import Book, Author, UserInfo  # 这个需要我们自己导入相应的模型类(数据表)


class AuthorAdmin(admin.ModelAdmin):
    fields = ('author_id',) # 需要显示的字段


admin.site.register(Author, AuthorAdmin)

admin.site.register([Book, UserInfo])

📑作用:设置表单中需要显示的数据

表单显示分块

📌我们还可以将输入栏分块,每个栏也可以定义自己的格式

fieldsets = (
        ['Main', {
            'fields': ('author_id', ),
        }],
        ['Advance', {
            'classes': ('collapse',),  # CSS
            'fields': ('email',),
        }]
    )

上面的栏目分为了 Main Advance 两部分。classes 说明它所在的部分的 CSS 格式(这里学会这个即可)。

这里让 Advance 部分隐藏: ‘class’: (‘collapse’,) 表示将该字段设置为折叠状态,以便在用户需要时选择展开

内联显示

📌内联基础是需要两个表有外部键,所以有外部参考的关系

而在默认的页面显示中,将两者分离开来,无法体现出两者的从属关系。我们可以使用内联显示,让 一个页面 附加在另外一个页面 的编辑页面上显示。

from django.contrib import admin
from import_export.admin import ImportExportModelAdmin

from book.models import Author, Book


class TagInline(admin.TabularInline):
    model = Book
    extra = 1  # extra 参数指定了默认行的数量


@admin.register(Author)  # 新的注册写法
class AuthorAdmin(ImportExportModelAdmin, admin.ModelAdmin):
    # fields = ('name', 'email', 'gender')  # 需要显示的字段
    list_display = ('name', 'email')
    search_fields = ('name', 'email')
    list_filter = ('age',)
    ordering = ['email', ]
    inlines = [TagInline]
    list_per_page = 50  # 添加每页记录数。
    fieldsets = (['Main', {
        'fields': ('name', 'email'), }],
                 ['Advance', {
                     # 'classes': ('collapse',),
                     'fields': ('age', 'gender'), }]
                 )


admin.site.register([Book])  # 注册表

列表显示

📌我们也可以自定义该页面的显示,比如在列表中显示更多的栏目.用于增加和显示更多的列

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('author_id', 'email')

搜索栏目创建

📌作用是增加搜索组件,并且搜索指定的字段数据

class AuthorAdmin(admin.ModelAdmin):
	search_fields = ('name',)

筛选

📌对数据列进行筛选,获取筛选后的数据。筛选指定的列

class AuthorAdmin(admin.ModelAdmin):
    list_filter = ('author_id',)

排序

📌对列数据进行排序

class AuthorAdmin(admin.ModelAdmin):
    ordering = ['email', ]  # 添加一个排序选项

分页

📌当你有成千上万条记录时,您可以通过分页来显示少量的记录。以下是实现分页的步骤:

class AuthorAdmin(admin.ModelAdmin):
    list_per_page = 50  # 添加每页记录数。

导入导出

📌在 Django Admin 后台管理中,您还可以导入和导出数据。以下是实现导入和导出的步骤:

  1. 📑安装 django-import-export 模块
pip install django-import-export

2 📑确定已经安装并在 INSTALLED_APPS 中注册了 import_export 应用程序

from import_export.admin import ImportExportModelAdmin # 一定要导入导入导出模块

class BookAdmin(ImportExportModelAdmin, admin.ModelAdmin):

Django模板

在这里插入图片描述

Django 的模板系统将 Python 代码与 HTML 代码解耦,动态地生成 HTML 页面。Django 项目可以配置一个或多个模板引擎,但是通常使用 Django 的模板系统时,应该首先考虑其内置的后端 DTL(DTL 是一种用来创建模板变量和标签的语言,它允许你在模板中引用 Python 变量和函数,并在 Web 应用程序中生成动态内容) 模板语言。

什么是模板

📑 📑在 Django 中,模板是可以根据字典数据动态变化的,并且能够根据视图中传递的字典数据动态生成相应的 HTML 网页。Django 中使用 Template 来表示模板,Template 对象定义在 template 文件中

  • 模板的配置

📌 首先按照BookStore/templates路径创建模板文件夹 templates,在 settings.py 配置文件中有一个 TEMPLATES 变量,如下所示:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],  #指定模板文件的存放路径
        'APP_DIRS': True, #搜索APP里面的所有templates目录
        'OPTIONS': {
            'context_processors': [  #context_processors 用于配置模板上下文处理器
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

📑 其中每一项含义如下所示:

  • BACKEND : Django默认设置,指定了要是用的模板引擎的 Python 路径;

  • DIRS : 一个目录列表,指定模板文件的存放路径,可以是一个或者多个。模板引擎将按照列表中定义的顺序查找模板文件;

  • APP_DIRS : 一个布尔值,默认为 Ture。表示会在安装应用中的 templates 目录中搜索所有模板文件;

  • OPTIONS : 指定额外的选项,不同的模板引擎有着不同的可选参数例如context_processors 用于配置模板上下文处理器,在使RequestContext时将看到它们的作用。

  • 📑修改settings配置文件

📌 修改 settings.py 文件,设置 TEMPLATES 的 DIRS 值来指定模板的搜索目录为“templates”如下所示:

'DIRS': [os.path.join(BASE_DIR, 'templates')]

模板使用

在你的 Django 应用程序中的 templates 目录中创建一个新的模板文件,比如说 hello.html,然后在文件中编写以下 HTML 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>

在这个示例中,{{ name }} 是由两个花括号包裹的模板变量。当 Django 渲染模板时,它会查找模板上下文中的 name变量,并将其值替换为模板中的变量。最终,模板引擎会将渲染后的 HTML 网页发送给浏览器。

📌视图中出来通过render方法直接加载并响应模板:

from django.shortcuts import render
return render(request,'模板文件名', 字典数据)

以下代码是一个 Django 视图函数,它渲染一个包含变量 name 的 HTML 模板,并将渲染后的结果发送给客户端的浏览器。

from django.shortcuts import render

def hello(request):
    context = {
        'name': 'Alice',
    }
    return render(request, 'hello.html', context)

我们需要在 Django 中定义视图函数来处理来自浏览器的 HTTP 请求。当然,这只是 Django 中的一部分。我们还需要配置 URL映射、编写模板等等

📌在 BookStore/urls.py 文件的 urlpatterns 列表中为视图函数配置路由映射关系。

配置如下:

from django.contrib import admin
from django.urls import path
from index import views  # 导入刚视图文件

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', views.hello),  # 当访问主路径下的hello路径时,返回视图中的hello函数
]

📌以上这段代码定义了 Django URL 常规写法,包括两个 URL 映射规则:

  1. 第一个 URL 映射规则将浏览器中输入的 URL 路径 /admin/ 映射到 Django 管理后台。
  2. 第二个 URL 映射规则将浏览器中输入的 URL 路径 /hello/ 映射到 views.hello 视图函数。
  3. 其中,第二个 URL 映射规则,通过 path() 函数指定了一个 URL 路径 /hello/,并将它映射到名为
    views.hello 的视图函数。
  4. 这意味着,当该 Django 应用程序接收到浏览器中的 /hello/ 请求时,Django 将自动调用
    views.hello(request) 来响应该请求,其中 request 参数将包含来自浏览器的 HTTP 请求对象。
  5. views.py 文件中,我们必须定义一个名为 hello() 的函数,以匹配 URL 映射规则。您可以在该函数中编写所需的
    Python 代码,以生成 HTTP 响应并将其发送回浏览器。

📌此时就完成了一个简单的示例演示了。配置完成后直接访问路径http://127.0.0.1:8000/hello/

📑除了上面的这种方法,也可以通过 loader 获取模板,通过 HttpResponse 进行响应

from django.http import HttpResponse
from django.template import loader
context = {
    'name': '苯环',
}
# 1.通过loader加载模板
t = loader.get_template("hello.html")
# 2.将t转换成HTML字符串
html = t.render(context)
# 3.用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(html)

📑总结 从上述过程我们不难体会 Django 视图函数的实现流程。

  1. 首先在 templates 文件夹中新建了xxx.html 文件,使用它作为模板文件;
  2. 为模板文件配置对应的视图,为模板进行传参。
  3. 然后我们配置了视图函数的路由映射关系,来访问视图;

render方法详解

renbder 方法的作用是结合一个给定的模板和一个给定的字典,并返回一个渲染后的 HttpResponse
对象。通俗的讲就是把字典格式的内容,加载进 templates 目录中定义的 HTML 文件,最终通过浏览器渲染呈现。

📌通过点击函数可以看到render () 方法的完整参数格式如下所示:

render(request, template_name, context=None, content_type=None, status=None, using=None)

📑以下每个参数的含义如下所示:

  • request 是一个固定参数,用于生成响应的请求对象
  • template_name: templates 中定义的文件, 要注意路径名。比如 “templates\appname\index.html”, 参数就要写"appname\index.html"
  • context: 要传入文件中用于渲染呈现的数据, 默认是字典格式;
  • content_type: 生成的文档要使用的媒体格式类型。默认为 DEFAULT_CONTENT_TYPE 设置的值;
  • status: http 的响应代码,默认是 200;
  • using: 用于加载模板使用的模板引擎的名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CVPR | 时尚领域视觉语言预训练模型Kaleido-BERT

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 这是一篇在时尚领域、往细粒度方向做视觉-语言预训练的工作。 论文标题&#xff1a;Kaleido-BERT: Vision-Language Pre-training on Fashion Domain 论文链接&#xff1a;https://arxiv.org/abs/2103.1611…

深度刨析指针Advanced 2

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

使用omp并行技术加速最短路径算法-迪杰斯特拉(Dijkstra)算法(记录最短路径和距离)

原理&#xff1a; Dijkstra算法是解决**单源最短路径**问题的**贪心算法** 它先求出长度最短的一条路径&#xff0c;再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。 首先假定源点为u&#xff0c;顶点集合V被划分为两部分&#xff1a;集合…

stable-diffusion-webui的介绍与使用——Controlnet1.1

源码地址&#xff1a;https://github.com/lllyasviel/ControlNet | 最新版本 controlnet-v1.1 论文地址&#xff1a;2302.Adding Conditional Control to Text-to-Image Diffusion Models 扩展UI地址&#xff08;需先安装sd-webui&#xff09;&#xff1a;https://github.com/M…

基于对Element UI的表单验证

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1fa80;从以下源码中介绍&#xff1a;&#x1f380;这里是官网源码 &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以介绍基…

杂记——FDA获批的AI超声产品

目前&#xff0c;人工智能算法在医学图像领域发展迅猛。相对于CT、MRI等&#xff0c;人工智能在超声图像处理领域仍处于起步阶段。近年来&#xff0c;多项研究利用深度学习、计算机视觉和图像处理等技术&#xff0c;对超声图像进行自动化分析、识别和量化&#xff0c;提供辅助医…

Golang的pprof性能分析

文章目录 一、pprof 概述二、服务开启pprof1、代码中引用pprof2、服务开启一个端口&#xff0c;用来监听pprof 三、使用pprof采集CPU耗时1、调用流程图2、查看火焰图 四、使用pprof分析内存泄漏问题查看当前程序的内存占用查看goroutine的运行时间 五、性能优化案例背景1、压测…

WIFI中的频段、信道、信道带宽

一、波长、波速与频率 波长波速/频率 “波速”由“介质”决定。 “频率”由“波源”决定。 “波长”由“介质”(波速V)、“波源”(频率f)共同决定。&#xff08;λV/f&#xff09; 波长&#xff08;wavelength&#xff09;&#xff1a; 指波在一个振动周期内传播的距离。也就…

【正点原子STM32连载】 第三十二章 光敏传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十…

【网络面试必问】浏览器如何委托协议栈完成消息的收发

接上一篇&#xff1a;【面试中的网络知识】DNS原理-如何实现域名和IP地址的查询转换  在前面的博客中&#xff0c;提到过无数次&#xff0c;浏览器作为应用程序&#xff0c;本身是不具备向网络中发送网络请求的能力&#xff0c;要委托操作系统的内核协议栈来完成。协议栈再调用…

新手学习Vmp之控制流程图生成

新手学习Vmp之控制流程图生成 控制流程图的生成对于反混淆分析来说是非常重要的一步&#xff0c;这里记录一下我研究的过程&#xff0c;以Vmp2为例子。 这里我的环境准备如下: Visual Studio IDA SDK Capstone Unicorn Graphviz IDA SDK插件环境&#xff0c;主要是有一些AP…

1.2数据机构——算法和复杂度

一、算法 1、概念&#xff1a;算法是对特定问题求解的一种描述&#xff08;或步骤&#xff09;&#xff0c;是指令的特定序列 2、程序数据结构算法 3、算法的特性&#xff1a; 有穷性&#xff1a;算法是有穷的&#xff0c;程序是无穷的 确定性&#xff1a;每条指令有确定的…

一文搞懂什么是Raid

RAID 1. 基本概念2. RAID 03. RAID 14. RAID 015. RAID 56. RAID6 1. 基本概念 RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种磁盘阵列技术&#xff0c;通过将多个物理磁盘组合成一个大容量的逻辑磁盘&#xff0c;提高磁盘存储的性能和可靠性。 R…

TOGAF 标准对数字化企业支持

这篇来点高大尚的&#xff0c;对技术、产品管理者和架构师写方案应该有用&#xff0c;其它不多谢&#xff0c;直接转入正题。 一、概述 TOGAF标准是在需要购买服务器硬件和网络设备的时候开始发展的&#xff1b;需要规划数据中心空间、电源和冷却&#xff0c;并协商和购买产品…

微服务SpringCloudday1 认识微服务与服务注册(Eureka与nacos)

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

arduino w801 流水灯

先复制个图过来 来源 https://www.cnblogs.com/milton/p/15621540.html 前两天老外跟联盛德网站回复我arduino库有完善的了 GitHub - board707/w80x_arduino: w806 for arduino ide package arduino 添加库地址 https://raw.githubusercontent.com/board707/w80x_arduino/ha…

【genius_platform软件平台开发】第九十八讲:嵌入式网络接口(MAC、PHY)

1. 嵌入式网络简介 1.1 嵌入式下的网络硬件接口 提起网络&#xff0c;我们一般想到的硬件就是“网卡”&#xff0c;现在网卡已经是通过一个芯片来完成了&#xff0c;嵌入式网络硬件分为两部分&#xff1a;MAC和PHY&#xff0c;大家都是通过看数据手册来判断一款SOC是否支持网络…

Linux tar.xz 格式的文件正确的解压命令

Linux tar.xz 最近下载 Linux kernel&#xff0c;好像最近流行 tar.xz 格式的后缀 对于 xz 后缀的压缩文件&#xff0c;我之前的解压方式是分为两步&#xff1a; xz -d xxx.tar.xz 解压成 xxx.tar 格式文件&#xff0c;然后再 tar xf xxx.tar 解压文件。 这样的操作不仅比较的…

【Java基础学习打卡11】Path环境变量的配置

目录 前言一、为什么配置环境变量二、如何配置环境变量三、JDK11的环境变量配置总结 前言 本文我们要知道为什么配置环境变量&#xff0c;自己思考不配置环境变量可以吗&#xff1f;JDK 11 如何配置环境变量。 一、为什么配置环境变量 原因很简单&#xff0c;就是方便命令的查…

痛点-调研-明确需求-实现-测试-发布 不需要手一步到位使用AGI生成去广告脚本,复制粘贴发布到Greasy Fork

总算又想起密码了, 自从用了语雀后, 其他平台基本都不再使用了 csdn 真的**, c h a t g p t 是禁词(已经改为了AGI, 通用型人工智能), 你倒是说清楚啊,直接来一句违反社区规定, 莫名其妙, 得靠猜…服了 今天来补上一篇利用AGI生成的js去广告脚本 前置知识(不看也问题不大) …