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

【Flask 系统教程 4】Jinjia2模版和语法

Jinjia2 模板

模板的介绍

Jinja2 是一种现代的、设计优雅的模板引擎,它是 Python 的一部分,由 Armin Ronacher 开发。Jinja2 允许你在 HTML 文档中嵌入 Python 代码,以及使用变量、控制结构和过滤器来动态生成内容。它的语法简洁清晰,易于学习和使用。

模板的使用

from flask import Flask, render_templateapp = Flask(__name__, template_folder="custom_templates")  @app.route('/')
def index():return render_template('index.html')if __name__ == '__main__':app.run(debug=True)

template_folder指定模板文件夹 默认是同级目录的 templates

  • 在以上案例下的文件架构如下
project_folder/
│
├── flask_app.py
│
└── custom_templates/│└── index.html

模板传递参数

当我们需要通过传递参数来修改模板中的内容时,就可以通过模板传参来实现

# app.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():# 定义要传递给模板的参数user = {'username': 'John', 'age': 30}fruits = ['Apple', 'Banana', 'Orange', 'Mango']return render_template('index.html', user=user, fruits=fruits)if __name__ == '__main__':app.run(debug=True)
<!--index.html-->
<!DOCTYPE html>
<html>
<head><title>Flask Template Example with Parameters</title>
</head>
<body><h1>Hello, {{ user.username }}!</h1><p>You are {{ user.age }} years old.</p><h2>Favorite Fruits:</h2><ul>{% for fruit in fruits %}<li>{{ fruit }}</li>{% endfor %}</ul>
</body>
</html>
  • 显示效果
    在这里插入图片描述

使用字典传参

对模板传参也支持使用字典的办法

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():# 定义要传递给模板的参数data = {'user': {'username': 'John', 'age': 30},'fruits': ['Apple', 'Banana', 'Orange', 'Mango']}return render_template('index.html', **data) # 这里使用**进行解包,这是Python3的特性if __name__ == '__main__':app.run(debug=True)

使用**解包传参,避免多参数的传参不便

模板中使用url_for函数

# app.py
from flask import Flask, render_template, url_forapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/hello')
def hello():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)
<!--index.html-->
<!DOCTYPE html>
<html>
<head><title>Flask Template Example with url_for()</title>
</head>
<body><h1>Hello, Flask!</h1><p>This is a template example.</p><p><a href="{{ url_for('hello') }}">Say Hello</a></p>
</body>
</html>

模板继承

继承允许你创建一个基础模板,并在其他模板中扩展它。

<!-- base.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title>
</head>
<body>{% block content %}{% endblock %}
</body>
</html>

在父模板中定义 block代表可变对象,语法 {% block block_name %} {% endblock %}

<!-- index.html -->
{% extends "base.html" %}{% block title %}Home{% endblock %}{% block content %}<h1>Hello, {{ name }}!</h1>
{% endblock %}

使用 extends 继承模板,使用 {% block block_name %}...{% endblock %}即可实现更改内容

include模板导入

在 Jinja2 模板中, include 指令允许你将一个模板导入到另一个模板中。这样可以使模板更具有模块化和可重用性,使代码更易于维护和管理。通过 include 指令,你可以将一个模板的内容嵌入到另一个模板中的任意位置。

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')if __name__ == '__main__':app.run(debug=True)
  • 定义 index.html作为主页
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>include</title>
</head>
<body>
<div class="container">{% include 'header.html' %}<h4>主题内容</h4>{% include 'footer.html' %}
</div>
</body>
</html>
  • 定义 header.html用来显示头部
<!-- header.html -->
<header><h1>Header</h1><nav><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li><li><a href="/contact">Contact</a></li></ul></nav>
</header>
  • 定义 footer.html用来显示脚部
<!-- footer.html -->
<footer><p>&copy; 2024 Flask Template Example. All rights reserved.</p>
</footer>
  • 效果
    在这里插入图片描述

使用静态资源

在 Web 开发中,静态资源(如样式表、JavaScript 文件、图像等)是构建用户界面和功能的重要组成部分。在 Flask 应用中,你可以使用静态资源来美化页面样式、增强交互性,并为用户提供更丰富的体验。下面是如何在 Flask 中使用静态资源的简单介绍:

组织静态资源文件夹

首先,你需要在 Flask 项目中创建一个文件夹来存放静态资源文件,通常命名为 static。在这个文件夹中,你可以按照你的项目结构组织样式表、JavaScript 文件、图像等静态文件。

your_flask_app/
│
├── static/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── img/
│       └── logo.png
│
├── templates/
│   └── index.html
│
└── app.py

使用静态资源

一旦你有了静态资源文件夹,你可以在模板中通过使用 url_for 函数来引用这些静态资源。例如,在模板中引用样式表文件 style.css

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>My Flask App</title><link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body><h1>Welcome to My Flask App</h1><img src="{{ url_for('static', filename='img/logo.png') }}" alt="Logo"><script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>

在这个示例中,url_for('static', filename='path/to/resource') 函数用于生成静态资源的 URL。在调用时,第一个参数 'static' 是 Flask 中默认用于静态资源的端点,而第二个参数 'filename' 是静态资源的路径。

设置静态文件夹地址

from flask import Flask, render_templateapp = Flask(__name__, static_folder="static2")  # 设置静态文件夹地址为 static2
# 第二种方式 app.static_folder = 'static2'@app.route('/')
def index():return render_template('index.html')if __name__ == '__main__':app.run(debug=True)

Jinjia2 语法

Jinja2 是一种现代的、设计优雅的模板引擎,它为开发者提供了一种简单而强大的方式来创建动态内容。Jinja2 的语法清晰简洁,易于学习和使用。在这里,我将详细介绍 Jinja2 的主要语法元素:

定义变量

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Template Example</title>
</head>
<body>{% set title = "Title" %}{% with subtitle="subtitle" %}{% set combined_title = title + " " + subtitle %}<h1>{{ combined_title }}</h1>{% with paragraph="This is the paragraph content of my website." %}<p>{{ paragraph }}</p>{% endwith %}{% endwith %}<!--  此处出了with的范围则不可使用其中变量subtitle等  -->
</body>
</html>

with只在范围内可用, set则是全局, with set可以结合使用


插入变量

在 Jinja2 中,你可以使用双大括号 {{ ... }} 来插入变量。这些变量将在渲染模板时替换为实际的值。

<p>Hello, {{ name }}!</p>

流程控制

Jinja2 支持常见的控制结构,如条件语句和循环。控制结构使用 {% ... %} 包裹。

条件语句

# app.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():# 假设这是从后端传递给前端的数据user = {'username': 'Alice', 'age': 30}return render_template('index.html', user=user)if __name__ == '__main__':app.run(debug=True)
<!--index.html-->
<!DOCTYPE html>
<html>
<head><title>选择结构示例</title>
</head>
<body><h1>欢迎访问我的网站!</h1><p>用户信息:</p><ul><li>用户名:{{ user.username }}</li><li>年龄:{{ user.age }}</li></ul>{% if user.age < 18 %}<p>您未满18岁,属于未成年人。</p>{% elif user.age >= 18 and user.age < 60 %}<p>您已满18岁,属于成年人。</p>{% else %}<p>您已年满60岁,属于老年人。</p>{% endif %}
</body>
</html>
  • 效果
    在这里插入图片描述

循环

from flask import Flask, render_templateapp = Flask(__name__)# 假设这是你的数据
items = {"Apple": "Red","Banana": "Yellow","Orange": "Orange","Grapes": "Purple"
}@app.route('/')
def index():return render_template('index.html', items=items)if __name__ == '__main__':app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Jinja2 Example</title>
</head>
<body><h1>Fruit Colors</h1><ul>{% for fruit, color in items.items() %}<li>{{ fruit }}: {{ color }}</li>{% endfor %}</ul>
</body>
</html>
  • 效果
    在这里插入图片描述

注释

你可以在模板中使用 {#...#}添加注释,这些注释不会在最终渲染的输出中显示。

{# This is a comment #}

过滤器

过滤器允许你在输出中应用转换。它们以管道符 | 的形式使用。

官方使用文档

<p>{{ sentence|capitalize }}</p>
过滤器描述示例用法
capitalize将变量的首字母转换为大写。{{ variable_name|capitalize }}
lower将变量转换为小写。{{ variable_name|lower }}
upper将变量转换为大写。{{ variable_name|upper }}
title将每个单词的首字母转换为大写。{{ variable_name|title }}
trim移除变量的首尾空格。{{ variable_name|trim }}
escape将 HTML 转义为安全的字符串。{{ variable_name|escape }}
safe标记变量为安全,告诉模板引擎不要转义该变量。{{ variable_name|safe }}
length返回变量的长度。{{ variable_name|length }}
default如果变量为 False、None 或空,使用默认值。 {{variable_name|default('default_value',boolean=True)}}
简单办法 {{ variable_name or "default_value" }}
urlencode对 URL 进行编码。{{ variable_name|urlencode }}
join使用指定字符将列表中的元素连接起来。{{ list_variable|join(', ') }}
slice从列表中取出一部分元素。{{ list_variable|slice(start, stop) }}
sort对列表进行排序。{{ list_variable|sort }}
reverse将列表倒序。{{ list_variable|reverse }}
dictsort对字典按键或值进行排序。{{ dict_variable|dictsort(attribute='key') }}
abs返回变量的绝对值。{{ variable_name|abs }}
round四舍五入到指定的小数位数。{{ variable_name|round(precision=2) }}
striptags删除字符串中所有的
HTML标签,如果出
现多个空格,将替换
成一个空格
{{ variable_name|striptags }}
replace字符串替换 {{ text |replace('old', 'new') }}

自定义过滤器

# app.py
from flask import Flask, render_templateapp = Flask(__name__)# @app.template_filter("reverse") # 注册自定义过滤器
def reverse_filter(s):  # 自定义过滤器函数return s[::-1]app.jinja_env.filters['reverse'] = reverse_filter  # 注册自定义过滤器的第二种方法# 路由
@app.route('/')
def index():# 在模板中使用自定义过滤器message = "Hello, World!"return render_template('index.html', message=message)if __name__ == '__main__':app.run(debug=True)

使用装饰器或者 app.jinja_env.filters都可以设置过滤器

<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Custom Filter Example</title>
</head>
<body>
<p>origin message: {{ message }}</p>
<p>Reversed message: {{ message | reverse }}</p>
</body>
</html>

定义宏

宏类似于函数,允许你定义可重用的代码块。

  • 宏没有返回值

Python文件中定义宏

from flask import Flask, render_templateapp = Flask(__name__)# 定义一个简单的宏,用于在模板中显示消息
@app.template_global()
def display_message(message):return f"Message: {message}"@app.route('/')
def index():return render_template('index.html', message="Hello, world!")if __name__ == '__main__':app.run(debug=True)

py文件中直接定义了宏方法,可在 html文件中直接使用

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Template Example</title>
</head>
<body><!-- 使用宏显示消息 -->{{ display_message(message) }}
</body>
</html>

html文件中定义宏

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flask Template Example</title>
</head>
<body><!-- 定义宏 -->{% macro display_message(message) %}<p>Message: {{ message }}</p>{% endmacro %}<!-- 使用宏 -->{{ display_message("Hello, world!") }}
</body>
</html>
  • 效果
    在这里插入图片描述

宏文件引用

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html', message="Hello, world!")if __name__ == '__main__':app.run(debug=True)
<!-- 引入宏文件并传递变量 -->
{% import 'macros/macros.html' as macros with context %}
<!--引入宏而不传递变量-->
{% import 'macros/macros.html' as macros %}<!-- 另一种引入方式 -->
{% from 'macros/macros.html' import display %}<!-- 使用宏并传参 -->
{{ macros.display_message(message) }}
<!-- 使用宏 -->
{{ display() }}
  • 在引入宏的时候,可以使用 with context来共享变量,意思是此时的宏中能直接使用当前环境下有的变量。
  • 注意文件架构
project_folder/
│
├── flask_app.py
│
└── macros/│└── macros.html
<!-- macros.html -->
{% macro display_message(content) %}
<p>Content: {{ content }}</p>
{% endmacro %}{% macro display(content) %}
<p>Content: {{ message }}</p>
{% endmacro %}

变量过滤器

Jinja2 提供了一些内置的变量过滤器,用于对变量进行处理,例如格式化日期、字符串截断等。

{{ user.created_at|date("Y-m-d") }}

转义

在插入变量时,默认情况下 Jinja2 会自动转义 HTML 字符,以防止 XSS 攻击。但是,你也可以使用 safe 过滤器来禁用转义。

{{ unsafe_html|safe }}

过滤器链

你可以将多个过滤器串联在一起,以便在一个变量上应用多个转换。

{{ sentence|capitalize|truncate(50) }}

相关文章:

【Flask 系统教程 4】Jinjia2模版和语法

Jinjia2 模板 模板的介绍 Jinja2 是一种现代的、设计优雅的模板引擎&#xff0c;它是 Python 的一部分&#xff0c;由 Armin Ronacher 开发。Jinja2 允许你在 HTML 文档中嵌入 Python 代码&#xff0c;以及使用变量、控制结构和过滤器来动态生成内容。它的语法简洁清晰&#…...

与 Apollo 共创生态:七周年大会心得

与 Apollo 共创生态&#xff1a;七周年大会心得 前言 4月19日&#xff0c;百度Apollo迎来七周年&#xff0c;历经七年的不懈追求与创新&#xff0c;Apollo开放平台已陆续推出了13个版本&#xff0c;汇聚了来自全球170多个国家与地区的16万名开发者及220多家合作伙伴。作为一名…...

『FPGA通信接口』DDR(4)DDR3内存条SODIMMs读写测试

文章目录 前言1.MIG IP核配置2.测试程序3.DDR应用4.传送门 前言 不论是DDR3颗粒还是DDR3内存条&#xff0c;xilinx都是通过MIG IP核实现FPGA与DDR的读写。本文区别于DDR颗粒&#xff0c;记录几个与颗粒配置不同的地方。关于DDR的原理与MIG IP的简介&#xff0c;请查看前面文章&…...

Element UI 快速入门指南

Element UI 快速入门指南 Element UI 是一个基于 Vue.js 的组件库&#xff0c;提供了丰富的 UI 组件和工具&#xff0c;可以帮助开发人员快速构建现代化的 Web 应用程序。本文将介绍如何快速入门使用 Element UI&#xff0c;并展示一些常用的组件和功能。 安装 Element UI 使…...

CentOS常用命令有哪些?

目录 一、CentOS常用命令有哪些&#xff1f; 二、不熟悉命令怎么办&#xff1f; 场景一&#xff1a;如果是文件操作&#xff0c;可以使用FileZilla工具来完成 场景二&#xff1a;安装CentOS桌面 一、CentOS常用命令有哪些&#xff1f; CentOS 系统中有许多常用命令及其用法…...

cmd查看局域网内所有设备ip

说明&#xff1a;最近碰到一个新问题&#xff0c;就是有一个安卓设备&#xff0c;安装了一个app导致死机了&#xff0c;app设置了开机重启&#xff0c;所以&#xff0c;无论重启还是关机&#xff0c;都是进来就白屏&#xff0c; 这可把人愁坏了&#xff0c;直接死循环了 无论…...

5.3作业

这个声明定义了一个名为 s 的数组&#xff0c;数组包含 10 个元素&#xff0c;每个元素都是一个函数指针。(1)C (2)D (3)C (4)DE (5)C8 11 14(1)int IsFull(sequeue *seqn) { return ((seqn->frnt ((seqn->rear 1) % N)) ? 1 : 0); } (2)int IsEmpty(sequ…...

java-Spring-mvc-(请求和响应)

目录 &#x1f4cc;HTTP协议 超文本传输协议 请求 Request 响应 Response &#x1f3a8;请求方法 GET请求 POST请求 &#x1f4cc;HTTP协议 超文本传输协议 HTTP协议是浏览器与服务器通讯的应用层协议&#xff0c;规定了浏览器与服务器之间的交互规则以及交互数据的格式…...

亚马逊测评工作室如何轻松实现高收益,跨境电商揭秘汇率差赚钱术

随着跨境电商在国内市场的持续繁荣&#xff0c;众多电商卖家纷纷将目光投向了这一充满活力的领域。面对国内市场的激烈竞争&#xff0c;许多卖家选择向外拓展&#xff0c;寻求更广阔的发展空间。其中&#xff0c;亚马逊成为了众多卖家的不二选择&#xff0c;毕竟老外的市场还是…...

unity中 UnityWebRequest.Post和 UnityWebRequest uwr = new UnityWebRequest两种方法有什么区别

在Unity中&#xff0c;UnityWebRequest.Post 和 UnityWebRequest uwr new UnityWebRequest(...) 是两种不同的方式来创建和发送HTTP POST请求&#xff0c;但它们之间有一些关键的区别和用法上的差异。 1. UnityWebRequest.Post (静态方法) UnityWebRequest.Post 是一个静态方…...

Java学习-练习试用Java实现求素数

以下是使用Java语言试着编写的求1-100内的素数的程序&#xff1a; public class PrimeNumbers {public static void main(String[] args) {System.out.println("Prime numbers between 1 and 100 are:");for (int i 2; i < 100; i) {if (isPrime(i)) {System.ou…...

最近学习发现一个background-blend-mode,这是CSS的一个新成员吧!这里分享记录一下

介绍 background-blend-mode CSS 属性定义该元素的背景图片&#xff0c;以及背景色如何混合。 混合模式应该按background-image CSS 属性同样的顺序定义。如果混合模式数量与背景图像的数量不相等&#xff0c;它会被截取至相等的数量。在所有的元素中。在SVG&#xff0c;它适…...

虚幻引擎5 Gameplay框架(二)

Gameplay重要类及重要功能使用方法&#xff08;一&#xff09; 配置LOG类及PlayerController的网络机制 探索验证GamePlay重要函数、类的执行顺序与含义 我们定义自己的日志&#xff0c;专门建立一个存放自己日志的类&#xff0c;这个类继承自BlueprintFunctionLibrary 然后…...

云原生Kubernetes: K8S 1.29版本 部署Sonarqube

一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K8S node节点1.29.0192.168.204.10已部署Kuboard &#xff08;2&#xff09;master节点查看集群 1&…...

读天才与算法:人脑与AI的数学思维笔记19_深度数学

1. 深度数学 1.1. 组合与选择&#xff0c;是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里&#xff08;Paul Valry&#xff09; 1.2. 利用以往的数学定理证明过程训练算法&#xff0c;以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉&#xff0c…...

Springboot+Vue项目-基于Java+MySQL的旅游网站系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

Element UI 简介

Element UI是一个基于Vue.js的组件库&#xff0c;提供了一套丰富的可复用的组件&#xff0c;包括按钮、表单、弹框、表格、菜单等等。它的设计风格简洁大方&#xff0c;易于使用&#xff0c;能够帮助开发者快速构建现代化的Web应用。 在Element UI中&#xff0c;有许多常用的组…...

mysql 删除重复的数据保留id最大的一条

在 MySQL 中&#xff0c;可以使用以下查询删除重复数据&#xff0c;只保留 ID 最大的那条记录&#xff1a; SQL DELETE t FROM table_name t LEFT JOIN ( SELECT column_name, MAX(id) AS max_id FROM table_name GROUP BY column_name ) t2 ON t.column_name t2…...

UE4 Widget制作搜索框

效果&#xff1a; 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项&#xff08;注意&#xff1a;这里使用的是reverse循环&#xff01;&#xff09; 2.判断是否含有关键字&#xff0c;创建子控件...

JavaScript js写九九乘法表(两种方法)

方法一&#xff1a; 观察规律&#xff1a; 第一个数每行都是自增1。 我们发下第二个数都是从1开始&#xff0c;依次递增1&#xff0c;永远不大于前面的数。 前面数字每自增一次&#xff0c;后面数字自增一轮。 我们可以用双重for循环&#xff0c;外层初始值设为i&#xff0…...

算法--贪心算法

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤其有效&#xff0c;这意味着局部最优解能决定全局最优解。简单来说&#xff0c;贪心…...

Redis基本數據結構 ― String

Redis基本數據結構 ― String 介紹常用命令範例1. 為字串鍵設值/取得字串鍵的值2. 查看字串鍵的過期時間3. 如何為key設置時間?4. 如何刪除指定key?5. 如何增加value的值?6. 獲取value值的長度 介紹 字串鍵是Redis中最基本的鍵值對類型&#xff0c;這種類型的鍵值對會在數據…...

php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递

代码如下图&#xff1a;这样子在foreach中是无法修改class_history的。正确的应该是去掉??[]判断。 public function actionY(){$array [name>aaa,class_history>[[class_name>一班,class_num>1],[class_name>二班,class_num>2]]];foreach ($array[class_…...

传输层协议 TCP UDP协议 解析(二)

文章目录 UDP&#xff1a;用户数据报协议UDP报文格式TCP与UDP的区别 UDP&#xff1a;用户数据报协议 UDP是一种面向无连接的传输层协议&#xff08;数据一直发送&#xff0c;没有ack&#xff0c;所以不需要考虑ack&#xff09;&#xff0c;传输可靠性没有保证。 UDP不提供重传…...

java+jsp+Oracle+Tomcat 记账管理系统论文(一)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…...

echarts双Y轴,并实现图例等

一个Y轴时yAxis为对象 yAxis: {type: value,name: 占比(%) },两个Y轴时yAxis为数组 yAxis: [{ // 左侧的type: value,name: 占比(%),nameTextStyle: {padding: [0, 0, 10, -50]},min: 0,max: 100,splitNumber: this.splitNumber, // 设置坐标轴的分割段数interval: 20, // 标轴…...

STM32 工程移植 LVGL:一步一步完成

STM32 工程移植 LVGL&#xff1a;一步一步完成 LVGL&#xff0c;作为一款强大且灵活的开源图形库&#xff0c;专为嵌入式系统GUI设计而生&#xff0c;极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者&#xff0c;小编正逐步深入探索LVGL的奥秘&#xff0c;并决…...

Linux中分析日志及问题排查

可以参考:Linux命令 Linux系统日志是系统管理和故障排查的关键工具。通过分析系统日志,我们能够深入了解系统的运行状况,迅速发现并解决潜在的问题。 1. 日志文件位置 系统日志通常存储在/var/log/目录下,不同的日志有不同的文件,如下: /var/log/syslog:系统日志,包含…...

复杂环境下实时鲁棒3D激光雷达定位

复杂环境下实时鲁棒3D激光雷达定位 一、摘要 定位是机器人领域的重要研究方向。本篇文章里&#xff0c;我们提出了一种基于3D激光雷达的复杂环境下的定位方案。我们首先使用GPS和雷达建立一张点云地图&#xff0c;然后在匹配定位的时候从大地图中分割出一个小地图&#xff0c…...

9.3.k8s的控制器资源(deployment部署控制器)

目录 一、deployment部署控制器概念 二、deployment资源的清单编写 三、小结 功能 使用场景 原理 四、deployment实现升级和回滚 1.编辑deployment资源清单&#xff08;v1版本&#xff09; 2.创建service资源用于访问 ​编辑 3.修改deploy清单中pod镜像版本为V2 4…...

北大青鸟网站建设/企业推广托管

理论也有理论存在的意义&#xff1a;反复咀嚼让它们烂熟于心&#xff0c;有认知才能有觉察&#xff0c;有理念才能有提醒。 黄金圈思维思考法则&#xff1a; 第一个层面是what&#xff0c; 也就是事情的表象&#xff0c; 我们具体做的每一件事&#xff1b; 第二个层面是how&…...

网站建设北京/站长工具域名解析

前个星期&#xff0c;公司的项目在客户那里出现了点问题&#xff0c;情况为电话打入后&#xff0c;系统不能弹单&#xff08;打入电话的时候会显示打入电话者的三字段信息&#xff1a;名字、电话、地址&#xff09;&#xff0c;经过检查后&#xff0c;发现为系统在向GIS系统发送…...

新做的网站怎样让百度收录/网页设计与制作教程

2019独角兽企业重金招聘Python工程师标准>>> NGINX 在网络应用中表现超群&#xff0c;在于其独特的设计。许多网络或应用服务器大都是基于线程或者进程的简单框架&#xff0c;NGINX突出的地方就在于其成熟的事件驱动框架&#xff0c;它能应对现代硬件上成千上万的并…...

江苏住房和城乡建设厅官方网站/怎样优化网站关键词排名靠前

解析#pragma指令 在所有的预处理指令中&#xff0c;#Pragma 指令可能是最复杂的了&#xff0c;它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C语言完全兼容的情况下,给出主机或操作系统专有的特征。依据…...

网站备案期间打不开/成都seo的方法

0. 现象 redis某节点出现宕机,删除后重新部署出现如下问题: unrecoverable erro:corrupted cluster config file 2.原因分析 /var/lib/redis/nodes.conf,频繁重启虚机的过程中文件破坏,信息不完整或数据不一致造成。 3. 解决方案 步骤1:数据平台中停止Redis服务...

网站的特征包括/移动广告平台

w3af是一个Web应用程序和审计框架。该项目的目标是创建一个框架&#xff0c;通过查找和利用所有Web应用程序漏洞来帮助您保护Web应用程序github地址&#xff1a;https://github.com/andresriancho/w3af.git直接git clone https://github.com/andresriancho/w3af.git 下载即可下…...