当前位置: 首页 > news >正文

【python】Django——templates模板、静态文件、django模板语法、请求和响应

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~

【Django专栏】
Django——django简介、django安装、创建项目、快速上手
Django——templates模板、静态文件、django模板语法、请求和响应
Django——连接mysql数据库

Django——templates模板、静态文件、django模板语法、请求和响应

  • templates模板
    • 按app顺序寻找模板
    • 全局模板
  • 静态文件
    • jquery
    • Bootstrap
  • django模板语法
    • 语法特性和用法
    • 视图中的render函数
    • 示例
  • 请求和响应
    • 请求(Request)
      • 1.request的属性和方法
      • 2.GET请求
      • 3.POST请求
    • 响应(Response)
      • 1.HttpResponse
      • 2.render
      • 3.redirect重定向
    • 报错解决

templates模板

Django 模板是 Django 框架中用于生成动态内容的一种工具,它允许开发者将 Python 代码和静态模板结合起来,以生成最终的 HTML 内容。使用 Django 模板可以让开发者在页面中插入动态数据、应用逻辑控制流程,并重用通用的页面结构和样式。

在 Django 中,模板通常与视图函数结合使用,视图函数负责处理业务逻辑并将数据传递给模板,模板则负责渲染这些数据并生成最终的 HTML 页面返回给用户。通过良好的组织和使用模板,可以使 Web 应用程序的代码更加清晰、易于维护,并提高开发效率。

按app顺序寻找模板

在这里插入图片描述
注意:renturn render()【不是找当前app,而是根据app的注册顺序寻找user_list.html】在这里插入图片描述

全局模板

一般情况下,属于哪个app的模板就写在哪个app下。全局模板需要配置

# 修改setting.pyimport os
TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [os.path.join(BASE_DIR,'templates')],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]

在这里插入图片描述
在这里插入图片描述

静态文件

样式表(CSS)、JavaScript 文件、图像、字体文件等

在使用 Django 这样的 Web 框架时,静态文件通常存储在应用程序的 “static” 目录中。这些静态文件可以包括用于美化页面样式的 CSS 文件,用于增强交互性的 JavaScript 文件,以及网站使用的图像、字体等资源。

jquery

jquery下载网址:https://releases.jquery.com/jquery/
jquery.3.6.min.js(打开链接复制粘贴):https://code.jquery.com/jquery-3.6.0.min.js
版本区别:
Uncompressed(未压缩):包含了完整的源代码,没有进行任何压缩或优化处理。便于阅读和调试,文件体积较大。

Minified(压缩):通过删除空格、注释和其他不必要的字符来减小文件体积。代码阅读和调试困难一些。

Slim(精简版):去掉了一些不常用的功能或模块,以减小文件大小。只保留核心功能,可以根据需求自行添加需要的模块或插件。

Slim Minified(精简压缩版):精简版进行了代码压缩处理,去除了多余的字符,以进一步减小文件体积。

Bootstrap

Bootstrap 中文网:https://www.bootcss.com/
下载Bootstrap v3:https://v3.bootcss.com/

{% load static %}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css'%}">
</head>
<body>
<h1>用户列表</h1>
<input type="text" class="btn btn-primary" value="新建"/>
<img src="{% static 'img/1.png' %}" alt=""><script src="{% static 'js/jquery.3.6.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

django模板语法

语法特性和用法

作为一个Web框架,Django需要一种方便的方法来动态地生HTML 。最常见的方法依赖于模板。模板包含所需HTML输出的静态部分以及一些特殊语法描述如何插入动态内容。Django 官方文档关于模板语法的网址:https://docs.djangoproject.com/en/3.2/topics/templates/

以下是 Django 模板语法的一些重要特性和用法:

  1. 变量插值

    • 在模板中使用 {{ 变量名 }} 的语法来插入变量的值。
    • 例如:<h1>{{ title }}</h1>
  2. 逻辑操作

    • 使用 {% 标签 %} 的语法来执行一些逻辑操作,如控制流程、循环和逻辑判断等。
    • 例如:{% if condition %} ... {% endif %}
  3. 过滤器

    • 过滤器允许对变量进行处理或格式化,以满足特定需求。
    • 通过在变量之后使用 | 和过滤器名称来应用过滤器。
    • 例如:{{ variable|filter_name }}
  4. 模板继承

    • 使用 {% extends 'base.html' %} 标签来创建一个模板继承结构,在子模板中可以覆盖父模板的特定部分。
    • 例如:在子模板中使用 {% block content %} ... {% endblock %} 来覆盖父模板中的内容。
  5. 包含

    • 使用 {% include 'partial.html' %} 标签将其他模板文件包含到当前模板中。
    • 这可以用于重复使用和组织模板代码。
  6. 循环

    • 使用 {% for item in items %} ... {% endfor %} 的语法进行循环操作。
    • 例如:循环遍历一个列表或查询集合中的数据。
  7. 静态文件引用

    • 使用 {% static 'path/to/file' %} 的语法引用静态文件,如 CSS、JavaScript 和图像等。
    • Django 通过静态文件处理器来管理和提供静态文件。

这只是 Django 模板语法的一小部分,还有其他更多的特性和用法。通过使用模板语法,开发人员可以在 Django 中构建灵活且具有动态性的网页,并将数据与模板进行分离,以便于维护和重用。

视图中的render函数

当在视图函数中使用 render 函数时,它会执行以下主要操作:

  1. 加载模板
    render 函数首先会根据给定的模板名称加载相应的模板文件。

  2. 渲染上下文
    接下来,render 函数会将传入的数据(上下文)与加载的模板结合起来,形成最终的渲染上下文。

  3. 渲染模板
    使用渲染上下文,render 函数会将模板中的变量、标签和过滤器等进行解析和替换,生成最终的 HTML 内容。

  4. 创建 HTTP 响应
    最后,render 函数会将渲染得到的 HTML 内容作为响应的正文,生成一个 HTTP 响应对象,并将其返回。

示例

在这里插入图片描述
views.py

# views.py
def template(request):teacher = "背背"students = ["圈圈1","圈圈2","圈圈3"]student_info = {'name':"圈圈", 'age':18, 'gender':"女"}return render(request,"template.html",{"t": teacher,"s": students,"s_info": student_info})

template.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法学习</title>
</head>
<body>
<h4 style="color:red">变量插值:</h4>
<div>teacher:{{ t }}</div><hr/>
<div>students列表:{{ s }}</div><hr/>
<div>students0:{{ s.0 }}</div>
<div>students1:{{ s.1 }}</div>
<div>students2:{{ s.2 }}</div><hr/>
<div>name:{{ s_info.name }}</div>
<div>age:{{ s_info.age }}</div>
<div>gender:{{ s_info.gender }}</div><h4 style="color:red">循环:</h4>
<div>{% for item in s%}<li>{{ item }}</li>{% endfor %}
</div><hr/><div>{% for k,v in s_info.items %}<li>{{ k }} : {{ v }}</li>{% endfor %}
</div><h4 style="color:red">逻辑操作:</h4>
<div>{% if s_info.name == "圈圈" %}Yes{% else %}No{% endif %}
</div>
</body>
</html>

在这里插入图片描述

请求和响应

在 Django 中,请求和响应是 Web 应用程序中非常重要的部分。以下是关于 Django 请求和响应的简要说明:

  1. 请求(Request)

    • 在 Django 中,请求对象代表了客户端发送给服务器的 HTTP 请求。请求对象包含了关于请求的各种信息,如 HTTP 方法、请求头部、路径参数、查询参数、表单数据等。
    • Django 的请求对象是 HttpRequest 类的实例,可以通过视图函数的参数获取到请求对象,并从中获取所需的信息。
  2. 响应(Response)

    • 响应对象代表了服务器对客户端请求的回复,包含了要发送回客户端的内容和元数据。在 Django 中,响应对象通常是 HttpResponse 或其子类的实例。
    • 可以通过视图函数返回一个响应对象来向客户端发送数据,响应对象可以包含 HTML 内容、JSON 数据、文件下载等。

在 Django 中处理请求和响应的过程通常发生在视图函数中。视图函数接收请求对象作为参数,根据请求的内容进行处理,并返回一个响应对象以供客户端使用。Django 还提供了许多方便的工具和函数来简化请求和响应的处理,如装饰器、模板渲染、重定向等,使得开发者可以更轻松地构建强大的 Web 应用程序。

请求(Request)

1.request的属性和方法

HttpRequest对象具有许多属性和方法,以下是其中一些常用的:

属性:

  • request.method:HTTP请求的方法,例如 ‘GET’ 或 ‘POST’。
  • request.GET:一个类似字典的对象,包含了所有的GET参数。
  • request.POST:一个类似字典的对象,包含了所有的POST参数。
  • request.FILES:一个类似字典的对象,包含了所有上传的文件。
  • request.path:当前请求的路径,不包括域名部分。
  • request.META:一个包含了所有HTTP头部信息的字典。
  • request.session:一个表示当前会话的Session对象。
  • request.user:表示当前经过身份验证的用户的User对象。

方法:

  • request.get():从请求参数中获取指定键的值,如果键不存在则返回默认值。
  • request.getlist():从请求参数中获取指定键的值列表,即使只有一个值也返回列表。
  • request.is_ajax():检查请求是否通过Ajax发送。
  • request.is_secure():检查请求是否通过安全连接(HTTPS)发送。
  • request.build_absolute_uri():构建完整的绝对URL。
  • request.is_authenticated():检查当前用户是否已经经过身份验证。
  • request.is_anonymous():检查当前用户是否匿名。

除了上述属性和方法之外,还有其他更多的属性和方法可用于处理HttpRequest对象。你可以根据需要在视图函数中使用这些属性和方法来获取请求的各种信息,并根据其进行相应的处理和响应。

2.GET请求

在这里插入图片描述
处理一个简单的 GET 请求时,以下是一个基本的 Django 视图函数示例:
views.py

# POST方式if request.method == 'POST':# 处理表单提交name = request.POST.get('name', '')email = request.POST.get('email', '')print(f'Hello, {name}! email,{email}')# 构造上下文数据context = {'name': name,'email': email,}# 渲染模板并返回响应return render(request, 'result.html', context)else:# 显示表单页面return render(request, 'register.html')

register.html

<!DOCTYPE html>
<html>
<head><title>输入信息</title>
</head>
<body><h2>请输入您的信息</h2><form method="post" action="/register/">
<!--        {% csrf_token %} 是 Django 模板标记,用于防止跨站请求伪造(CSRF)攻击。-->
<!--        Django 要求所有 POST 的表单都要包含这个标记,以确保安全性。-->{% csrf_token %}<label for="name">姓名:</label><input type="text" id="name" name="name"><br><br><label for="email">邮箱:</label><input type="email" id="email" name="email"><br><br><input type="submit" value="提交"></form>
</body>
</html>

result.html

<!-- result.html -->
<!DOCTYPE html>
<html>
<head><title>提交结果</title>
</head>
<body><h2>提交结果</h2><p>您提交的信息如下:</p><p>姓名:{{ name }}</p><p>邮箱:{{ email }}</p>
</body>
</html>

3.POST请求

在这里插入图片描述

register.html和result.html与GET方法相同

views.py

# GET方式:http://127.0.0.1:8000/register?name=圈圈&email=123456789@qq.comif request.method == 'GET':if request.GET.get('name')==None or request.GET.get('email')==None:return render(request, 'register.html')else:name = request.GET.get('name')email = request.GET.get('email')# 构造上下文数据context = {'name': name,'email': email,}return render(request, 'result.html', context)

响应(Response)

1.HttpResponse

return HttpResponse("响应1")

2.render

return render(request, 'register.html')

3.redirect重定向

return redirect("https://www.baidu.com")

报错解决

报错信息:
Forbidden (403)
CSRF verification failed. Request aborted.
在这里插入图片描述

报错原因:
这个错误通常是由于Django中的CSRF保护机制导致的。CSRF(Cross-Site Request Forgery)是一种网络安全攻击,Django通过在表单中添加CSRF标记来防止这种类型的攻击。当表单提交时,Django会验证CSRF标记,如果验证失败就会产生这个错误。

解决方法:

  1. 在模板中添加CSRF标记:确保你的表单模板中包含了{% csrf_token %}标记,例如:
<form method="post">{% csrf_token %}<!-- 其他表单字段 --><input type="submit" value="Submit">
</form>
  1. 使用csrf_exempt装饰器:如果你的视图函数不需要CSRF保护,你可以在视图函数上使用@csrf_exempt装饰器来跳过CSRF验证,例如:
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def your_view(request):# 视图函数代码
  1. 检查中间件设置:确保Django的CSRF中间件已经被正确添加到了MIDDLEWARE设置中,并且处于启用状态,例如:
MIDDLEWARE = [# ...'django.middleware.csrf.CsrfViewMiddleware',# ...
]

通过以上方法之一,你应该能够解决“CSRF verification failed. Request aborted.”这个错误,并成功提交表单数据。

相关文章:

【python】Django——templates模板、静态文件、django模板语法、请求和响应

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——templates模板、静态文件、djang…...

Android设计模式--观察者模式

时间是一只藏在黑暗中温柔的手&#xff0c;在你一出神一恍惚之间&#xff0c;物走星移 一&#xff0c;定义 观察者模式是定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解&am…...

【Linux】Ubuntu16.04下安装python高版本--源码安装

Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6&#xff08;但我没安装成功&#xff09; 好像是因为Ubuntu16.04的软件仓库&#xff08;源&#xff09;中python的最高版本就是python3.5&#xff0c;所以无法直接用apt来安装 #方法一 sudo…...

变长子网划分问题的二叉树解法

计网的变长子网划分、计组的变长操作码划分、数据结构的哈夫曼编码&#xff0c;都是前缀编码的本质&#xff08;变长操作码的二叉树解法我还在琢磨中&#xff09; 【二叉树解法】每条从叶结点到根节点的路径上有且只有一个被分配的结点&#xff1a; 【例】现将一个IP网络划分成…...

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了&#xff0c;今天我们来做一下redis的编译安装 Redis源码包官方下载链接&#xff1a;http://download.redis.io/releases/ 一、编译安装&#xff1a; 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…...

网络(一)总纲

一 总纲 ① 背景 1、该资料不管是在华为内部还是外部都是很出名的2、该教程仅仅作为个人笔记,形成自己的网络知识体系,自己会按照教程手把手做实验,copy图谱备注&#xff1a; 自己没有处理过物理网和虚拟网,所以会以一个小白的角度去理解,可能存在偏差3、立足点&#xff1a…...

WPF中的App类介绍

在WPF (Windows Presentation Foundation) 应用程序中&#xff0c;App 类扮演着很重要的角色。这个类通常在每个WPF应用程序中都会有&#xff0c;并且生成在App.xaml文件和其代码后台App.xaml.cs中。App类通常继承自System.Windows.Application类&#xff0c;并且有以下的主要职…...

.nc格式文件的显示及特殊裁剪方式

最近我们遇到一个nc格式的文件&#xff0c;需要将它做成报告插图&#xff0c;bing搜索一番以后&#xff0c;了解到nc的全名为NetCDF(network Common Data Form)&#xff0c;是一种网络通用数据格式&#xff0c;广泛用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。…...

为什么需要线程池?C++如何实现一个线程池?

为什么需要线程池&#xff1f;C如何实现一个线程池&#xff1f; 为什么需要线程池&#xff1f;C如何实现一个线程池&#xff1f;...

多视图聚类的论文阅读

当聚类的方式使用的是某一类预定义好的相似性度量时&#xff0c; 会出现如下情况&#xff1a; 数据聚类方面取得了成功&#xff0c;但它们通常依赖于预定义的相似性度量&#xff0c;而这些度量受原始方法的影响:当输入维数相对较高时&#xff0c;往往是无效的。 1. Deep Mult…...

shell脚本适用场景

1.适用场景 Shell脚本是一种用于自动化和批量处理任务的脚本语言。它通常在Unix/Linux系统中使用&#xff0c;并且被广泛应用于各种场景&#xff0c;包括但不限于以下几个方面&#xff1a; 自动化任务&#xff1a;Shell脚本可以用于编写自动化脚本&#xff0c;完成一系列重复性…...

Bash openldap同步AD组织数据

将AD的ou同步到openldap&#xff08;可支持全量同步和增量同步&#xff09; 整体思路如下&#xff1a; 从ad导出所有的数据&#xff0c;然后进行参数替换以及处理&#xff0c;处理后的文件称为A&#xff1b;从openldap导出所有的数据&#xff0c;然后进行参数替换以及处理&am…...

C#WPF文本转语音实例

本文介绍C#WPF文本转语音实例 实现方法:使用类库(SpeechSynthesizer )实现的。 一、首先是安装程序包。 二、创建项目 需要添加引用using System.Speech.Synthesis; UI界面 <Windowx:Class="TextToSpeechDemo.MainWindow"xmlns="http://schemas.micr…...

08-流媒体-RTMP拉流

整体方案&#xff1a; 采集端&#xff1a;摄像头采集&#xff08;YUV&#xff09;->编码&#xff08;YUV转H264&#xff09;->写封装&#xff08;&#xff28;264转FLV&#xff09;->RTMP推流 客户端&#xff1a;RTMP拉流->解封装&#xff08;FLV转H264&#xff09…...

一键免费去除视频水印和字幕的AI工具

最近有学员经常让我分享好用的智能抹除视频水印字幕AI工具&#xff0c;今天就给大家分享一个我经常用到的这款工具——腾讯智影&#xff0c;这个平台提供的智能抹除功能&#xff0c;借助这个工具我们可以将视频中不需要的字幕或者水印删除掉。 不过这款工具每天有三次免费次数…...

实验六:Android的网络编程基础

实验六&#xff1a;Android 的网络编程基础 6.1 实验目的 本次实验的目的是让大家熟悉 Android 开发中的如何获取天气预报&#xff0c;包括了 解和熟悉 WebView、WebService 使用、网络编程事件处理等内容。 6.2 实验要求 熟悉和掌握 WebView 使用 了解 Android 的网络编程…...

09-流媒体-FLV解复用

整体方案&#xff1a; 采集端&#xff1a;摄像头采集&#xff08;YUV&#xff09;->编码&#xff08;YUV转H264&#xff09;->写封装&#xff08;&#xff28;264转FLV&#xff09;->RTMP推流 客户端&#xff1a;RTMP拉流->解封装&#xff08;FLV转H264&#xff09…...

信息的浏览

万维网(WWW)是目前Internet上最流行的一种服务&#xff0c;它是建立在Internet上的多媒体集合信息系统。它利用超媒体的信息获取技术&#xff0c;通过一种超文本的表达方式&#xff0c;将所有WWW上的信息连接在一起。我们使用浏览器浏览网上的信息。 ▶浏览器 浏览器是指可以…...

vue directive自定义指令实现弹窗可拖动

vue2 创建一个js文件 // draggable.js export default {// 定义 Vue 插件install(Vue) {Vue.directive(draggable, { // 全局指令名为 v-draggableinserted(el) {el.onmousedown function (ev) {// 获取鼠标按下时的偏移量&#xff08;鼠标位置 - 元素位置&#xff09;const…...

07-流媒体-RTMP推流

整体方案&#xff1a; 采集端&#xff1a;摄像头采集&#xff08;YUV&#xff09;->编码&#xff08;YUV转H264&#xff09;->写封装&#xff08;&#xff28;264转FLV&#xff09;->RTMP推流 客户端&#xff1a;RTMP拉流->解封装&#xff08;FLV转H264&#xff09…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...