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

Odoo17 0.1常见的QWeb 模板语言指令的详细总结

Odoo QWeb 模板语言提供了许多指令 (directives) 来增强 HTML 模板的功能,使其能够动态地展示数据、进行条件判断、循环遍历、以及实现更复杂的逻辑。 这些指令都以 t- 开头作为属性添加到 HTML 标签上。

以下是一些常见的 Odoo QWeb 模板语言指令的详细总结,并附带解释和示例:

1. 条件渲染指令:

  • t-if="condition": 条件判断指令。只有当 condition 表达式求值为真 (truthy) 时,指令所在的 HTML 元素及其内容才会被渲染。

    • 语法:

      <tag t-if="condition"><!-- 当 condition 为真时渲染的内容 -->
      </tag>
      
    • 解释: condition 可以是一个布尔值、一个表达式、或者一个变量。 QWeb 会评估这个条件。 如果条件为 true, 非零数字, 非空字符串, 非空列表, 非空字典 等 truthy 值,则元素会被渲染。 否则,元素及其内部的内容会被完全忽略,不会出现在最终的 HTML 输出中。

    • 示例:

      <p t-if="user.is_admin">您是管理员用户。
      </p>
      <p t-if="order_count > 0">您有 <t t-esc="order_count"/> 个订单。
      </p>
      
  • t-elif="condition": else if 条件判断指令,必须紧跟在 t-if 或另一个 t-elif 之后。 当之前的 t-ift-elif 条件为假,并且当前 t-elifcondition 为真时,指令所在的 HTML 元素及其内容才会被渲染。

    • 语法:

      <tag t-if="condition1"><!-- 当 condition1 为真时渲染的内容 -->
      </tag>
      <tag t-elif="condition2"><!-- 当 condition1 为假且 condition2 为真时渲染的内容 -->
      </tag>
      
    • 解释: t-elif 提供了多分支条件判断的能力。 可以有多个 t-elif 指令,按顺序评估条件。

    • 示例:

      <p t-if="user_role == 'admin'">您是管理员。
      </p>
      <p t-elif="user_role == 'manager'">您是经理。
      </p>
      <p t-elif="user_role == 'user'">您是普通用户。
      </p>
      
  • t-else="": else 条件指令,必须紧跟在 t-ift-elif 之后。 当之前的所有 t-ift-elif 条件都为假时,指令所在的 HTML 元素及其内容才会被渲染。

    • 语法:

      <tag t-if="condition"><!-- 当 condition 为真时渲染的内容 -->
      </tag>
      <tag t-else=""><!-- 当 condition 为假时渲染的内容 -->
      </tag>
      
    • 解释: t-else 提供了一个默认分支,当所有前面的条件都不满足时执行。 t-else 后面通常不需要写条件表达式,直接使用空字符串 "" 即可。

    • 示例:

      <p t-if="is_logged_in">欢迎回来,<t t-esc="user.name"/>!
      </p>
      <p t-else="">请先登录。
      </p>
      

2. 循环指令:

  • t-foreach="items" t-as="item": 循环遍历指令。 用于遍历一个列表 (list) 或元组 (tuple) items 中的每个元素,并将当前元素赋值给变量 item (可以自定义变量名)。

    • 语法:

      <tag t-foreach="items" t-as="item"><!-- 循环体,可以使用变量 item 访问当前元素 -->
      </tag>
      
    • 解释: items 可以是一个列表、元组或者任何可迭代对象。 t-as="item" 定义了循环变量 item,在循环体内部可以使用 item 访问当前迭代到的元素。

    • 示例:

      <ul><li t-foreach="product_list" t-as="product"><t t-esc="product.name"/> - <t t-esc="product.price"/></li>
      </ul>
      
    • 循环上下文变量:t-foreach 循环中,QWeb 还会自动提供一些特殊的上下文变量,以 _ 开头:

      • _index: 当前循环的索引 (从 0 开始)。

      • _first: 布尔值,指示是否是第一次循环迭代。

      • _last: 布尔值,指示是否是最后一次循环迭代。

      • _even: 布尔值,指示当前索引是否为偶数。

      • _odd: 布尔值,指示当前索引是否为奇数。

      • _size: 循环迭代的总次数。

      • 示例使用循环上下文变量:

        <ul class="list-unstyled"><li t-foreach="items" t-as="item"><span t-if="_first">这是第一个元素: </span><span t-esc="item"/><span t-if="_last">, 这是最后一个元素。</span><span t-else>, </span></li>
        </ul>
        
  • t-foreach="dictionary" t-as="key, value": 循环遍历字典 (dictionary) 指令。 用于遍历一个字典 dictionary 中的键值对,并将当前键赋值给 key 变量,值赋值给 value 变量。

    • 语法:

      <tag t-foreach="dictionary" t-as="key, value"><!-- 循环体,可以使用变量 key 和 value 访问当前键值对 -->
      </tag>
      
    • 解释: dictionary 必须是一个字典对象。 t-as="key, value" 定义了键变量 key 和值变量 value

    • 示例:

      <dl><div t-foreach="user_info" t-as="info_key, info_value"><dt><t t-esc="info_key"/></dt><dd><t t-esc="info_value"/></dd></div>
      </dl>
      

3. 变量设置指令:

  • t-set="variable_name" t-value="expression": 设置变量指令。 用于在模板中定义或修改变量 variable_name,并将 expression 的求值结果赋值给该变量。

    • 语法:

      <t t-set="variable_name" t-value="expression"/>
      

      或者 (内容作为变量值):

      <t t-set="variable_name"><!-- 这里的内容会被作为变量的值 --><p>一些内容</p><t t-esc="another_value"/>
      </t>
      
    • 解释:

      • variable_name: 要设置的变量名 (字符串)。
      • t-value="expression": 要赋给变量的值的表达式。 如果省略 t-value 属性,则 t-set 标签内部的内容会被作为变量的值。
    • 示例:

      <t t-set="current_date" t-value="datetime.date.today()"/>
      <p>今天是: <t t-esc="current_date"/></p><t t-set="greeting"><h1>欢迎来到我们的网站!</h1><p>希望您喜欢这里。</p>
      </t>
      <t t-raw="greeting"/> <!-- 使用 t-raw 来渲染 HTML 内容 -->
      

4. 值输出指令:

  • t-value="expression": 表达式求值指令。 用于计算 expression 的值,并将结果不进行 HTML 转义直接输出到 HTML 中。 通常不直接使用 t-value 进行输出,因为它不安全,容易导致 XSS 攻击。 它主要用在 t-set 指令中赋值。

    • 语法:

      <tag t-value="expression"><!-- 通常 tag 标签内容会被忽略,输出的是 expression 的值 -->
      </tag>
      
    • 解释: expression 可以是任何 Python 表达式,可以访问模板上下文中的变量。 输出结果不会进行 HTML 转义。

    • 示例 (通常不直接用于输出,多用于赋值):

      <t t-set="calculated_value" t-value="price * quantity"/>
      <!-- 不推荐直接用于输出,除非你非常确定输出内容是安全的 -->
      <p t-value="unsafe_data_from_user"/>
      
  • t-esc="expression": 表达式求值并进行 HTML 转义 输出指令。 用于计算 expression 的值,并将结果进行 HTML 转义 后输出到 HTML 中。 这是最常用的输出指令,用于安全地显示动态数据,防止 XSS 攻击。

    • 语法:

      <tag t-esc="expression"><!-- 通常 tag 标签内容会被忽略,输出的是 expression 的值 (HTML 转义) -->
      </tag>
      
    • 解释: expression 可以是任何 Python 表达式。 输出结果会进行 HTML 转义,例如将 < 转换为 &lt;, > 转换为 &gt;, " 转换为 &quot;, & 转换为 &amp; 等。 这样可以防止恶意用户注入 HTML 代码。

    • 示例 (推荐使用):

      <p>当前用户姓名: <t t-esc="user.name"/></p>
      <p>商品价格: <t t-esc="product.price"/></p>
      <p>用户输入的内容: <t t-esc="user_input"/> <!-- 用户输入的内容会被安全转义 --></p>
      
  • t-raw="expression": 表达式求值并 原始输出 指令。 用于计算 expression 的值,并将结果 不进行任何 HTML 转义,直接作为原始 HTML 输出到页面中。 使用 t-raw 需要非常谨慎,只在输出的内容是完全可信且安全的 HTML 代码时才使用,否则可能存在 XSS 漏洞风险。 通常用于输出预先处理好的 HTML 代码片段。

    • 语法:

      <tag t-raw="expression"><!-- 通常 tag 标签内容会被忽略,输出的是 expression 的值 (原始 HTML) -->
      </tag>
      
    • 解释: expression 可以是任何 Python 表达式,但通常应该返回 HTML 字符串。 输出结果不会进行 HTML 转义,直接作为 HTML 代码渲染。

    • 示例 (谨慎使用):

      <t t-set="safe_html_content" t-value="'<h1>这是一个标题</h1><p>这是一个段落。</p>'"/>
      <div t-raw="safe_html_content"/> <!-- 输出 HTML 标题和段落 --><!-- 危险示例,如果 user_generated_html 来自用户输入,则存在 XSS 漏洞 -->
      <!-- <div t-raw="user_generated_html"/> -->
      

5. 模板调用指令:

  • t-call="template_name": 调用子模板指令。 用于在当前模板中调用另一个已定义的 QWeb 模板 template_name

    • 语法:

      <tag t-call="template_name"><!-- 可选: 可以使用 t-set 在这里向子模板传递参数 --><t t-set="param1" t-value="value1"/><t t-set="param2" t-value="value2"/>
      </tag>
      
    • 解释: template_name 是要调用的子模板的名称 (字符串)。 t-call 指令会将子模板的 HTML 输出嵌入到当前模板的指定位置。 可以在 t-call 标签内部使用 t-set 指令来向子模板传递参数 (变量)。 子模板可以通过访问这些参数变量来接收父模板传递的数据。

    • 示例:

      <!-- 父模板 -->
      <template id="parent_template"><div><h1>父模板标题</h1><p>这是父模板的内容。</p><t t-call="child_template"><t t-set="username" t-value="user.name"/></t><p>父模板内容结束。</p></div>
      </template><!-- 子模板 -->
      <template id="child_template"><div><h2>子模板标题</h2><p>欢迎您,<t t-esc="username"/>!</p> <!-- 子模板可以使用父模板传递的 username 参数 --></div>
      </template>
      
  • t-call="template_name" t-options="...": 调用子模板并传递选项。 t-options 属性允许向子模板传递更复杂的选项字典,用于控制子模板的渲染行为。 t-options 的具体内容取决于子模板的定义和期望接收的选项。

    • 语法:

      <tag t-call="template_name" t-options="options_dict"><!-- 可选: 仍然可以使用 t-set 传递参数,与 t-options 可以同时使用 -->
      </tag>
      
    • 解释: options_dict 是一个 Python 字典,包含了要传递给子模板的选项。 子模板需要预先定义好如何处理这些选项。 常见的 t-options 用途包括:

      • 传递 widget 参数: 例如用于格式化日期、货币等。
      • 传递格式化选项: 例如控制日期显示的格式、数字的小数位数等。
      • 传递渲染模式或配置参数: 例如控制子模板的显示风格或行为。
    • 示例 (假设子模板 formatted_date 接收 format 选项):

      <template id="date_template"><p>原始日期: <t t-esc="date_obj"/></p><p>格式化日期 (年-月-日): <t t-call="formatted_date" t-options="{&quot;format&quot;: &quot;yyyy-MM-dd&quot;, &quot;date&quot;: date_obj}"/></p><p>格式化日期 (月/日/年): <t t-call="formatted_date" t-options="{&quot;format&quot;: &quot;MM/dd/yyyy&quot;, &quot;date&quot;: date_obj}"/></p>
      </template><template id="formatted_date"><t t-set="format_str" t-value="options.get(&quot;format&quot;, &quot;yyyy-MM-dd HH:mm:ss&quot;)"/> <!-- 默认格式 --><t t-set="date_to_format" t-value="options.get(&quot;date&quot;)"/><t t-esc="date_to_format.strftime(format_str) if date_to_format else ''"/>
      </template>
      

6. 属性指令:

  • t-att-attribute_name="expression": 动态属性指令。 用于动态设置 HTML 元素的属性值。 attribute_name 会被替换成实际的 HTML 属性名,expression 的求值结果会作为属性值。

    • 语法:

      <tag t-att-attribute_name="expression"><!-- ... -->
      </tag>
      
    • 解释: attribute_name 可以是任何有效的 HTML 属性名 (例如 id, class, href, src, data-* 等)。 expression 的求值结果会被转换为字符串,并赋值给 attribute_name 属性。

    • 示例:

      <div t-att-id="'product_' + product.id" t-att-class="'product-card ' + ('featured' if product.is_featured else 'normal')"><!-- ... -->
      </div>
      <a t-att-href="'/product/' + product.id" t-att-title="product.name"><t t-esc="product.name"/>
      </a>
      
  • t-attf-attribute_name="string_interpolation": 属性格式化指令 (Attribute Formatting)。 使用 f-string 风格的字符串插值来动态设置 HTML 元素的属性值。 更简洁易读,尤其是在属性值需要拼接多个动态部分时。

    • 语法:

      <tag t-attf-attribute_name="f-string_expression"><!-- ... -->
      </tag>
      
    • 解释: attribute_name 是 HTML 属性名。 f-string_expression 是一个 f-string 风格的字符串,可以使用花括号 {} 包裹 Python 表达式,表达式的值会被插入到字符串中。

    • 示例:

      <div t-attf-id="product-{product.id}" t-attf-class="product-card {'featured' if product.is_featured else 'normal'}"><!-- ... -->
      </div>
      <a t-attf-href="/product/{product.id}" t-attf-title="{product.name}"><t t-esc="product.name"/>
      </a>
      

7. 其他指令 (简要介绍):

  • t-translation="on": 启用模板翻译。 用于标记模板需要进行国际化 (i18n) 翻译。 通常在模板的根元素上使用。

    • 示例:
      <template id="my_template" t-translation="on"><!-- 模板内容,可以使用 <t t-translatable="1">...</t> 标记可翻译的文本 -->
      </template>
      
  • t-lang="language_code": 设置模板的语言。 用于指定模板渲染时使用的语言,通常用于多语言环境。

    • 示例:
      <template id="my_template" t-lang="lang_code"><!-- 模板内容将以 lang_code 指定的语言渲染 -->
      </template>
      
  • t-cache="directive": 模板缓存指令。 用于控制模板的缓存行为,提高性能。 directive 可以是 cache, nocache, clear. 通常与 t-keyt-context 配合使用。 (高级用法,初学者可以先忽略)

  • t-debug="expression": 调试指令。 用于在模板渲染过程中输出 expression 的值到控制台,方便调试模板逻辑。 通常在开发阶段使用。

总结:

这些指令是 Odoo QWeb 模板语言的核心组成部分,掌握它们可以让你编写出功能强大、动态灵活的 Odoo 视图模板。 在实际开发中,你需要根据具体的需求灵活组合使用这些指令,来实现各种复杂的页面展示和交互逻辑。 建议多练习编写 QWeb 模板,并参考 Odoo 官方文档和示例代码,加深理解和掌握。

相关文章:

Odoo17 0.1常见的QWeb 模板语言指令的详细总结

Odoo QWeb 模板语言提供了许多指令 (directives) 来增强 HTML 模板的功能&#xff0c;使其能够动态地展示数据、进行条件判断、循环遍历、以及实现更复杂的逻辑。 这些指令都以 t- 开头作为属性添加到 HTML 标签上。 以下是一些常见的 Odoo QWeb 模板语言指令的详细总结&#…...

螺旋矩阵 II

螺旋矩阵 II 一、题目描述 给定一个正整数 n&#xff0c;请你生成一个包含 1 到 n^2 所有元素的 n x n 正方形矩阵&#xff0c;元素顺序按顺时针的方式进行螺旋排列。 示例 1&#xff1a;输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a;…...

Object:所有类的超类

定义&#xff1a;所有类的超(父)类。 Object有下面几个常用的方法&#xff1a; equals()&#xff1a;比较内存地址是否指向相同getclass()&#xff1a;获取类的信息--反射领域hashcode 散列码--根据地址生成wait -- 线程进入等待状态&#xff0c;让出CPU和锁notify -- 唤醒等待…...

LabVIEW 开发航天项目软件

在航天项目软件开发中&#xff0c;LabVIEW 凭借其图形化编程优势被广泛应用。然而&#xff0c;航天项目的高可靠性、高精度及复杂环境适应性要求&#xff0c;使得在使用 LabVIEW 开发时&#xff0c;有诸多关键要点需要特别关注。本文将详细分析在开发航天项目软件时需要重点注意…...

docker部署superset并连接华为MRS hive数据库

下载构建源码 这个项目实现了汉化和开箱即用&#xff0c;感谢大佬 GitHub - lutinglt/superset-zh: Superset 汉化, Superset 中文版 替换国内apt源 查看debian版本&#xff0c;不同版本替换apt源的内容不同 cat /etc/debian_version我这里是11.9版本 apt源文件sources.li…...

在 Flutter 实现下拉刷新、上拉加载更多和一键点击回到顶部的功能

在 Flutter 中&#xff0c;实现下拉刷新、上拉加载更多和一键点击回到顶部的功能&#xff0c;通常会结合使用 RefreshIndicator、ListView 和 ScrollController 来实现这些交互效果。下面分别介绍如何实现这些功能。 1. 下拉刷新 Flutter 提供了 RefreshIndicator 组件来实现…...

Linux常见命令——系统定时任务

文章目录 crontab 服务管理crontab -e :编辑crontab 定时任务crontab -l 查看crontab 任务crontab -r 删除当前用户所有的crontab 任务 crontab 服务管理 systemctl status crond该系统进程是开机自启动&#xff0c;并且被打开了&#xff0c;可以使用。 crontab -e :编辑cr…...

国产编辑器EverEdit - 书签功能介绍

1 书签 1.1 应用场景 当用户在文档中多处进行编辑时&#xff0c;为了方便在多个编辑位置跳转&#xff0c;使用书签功能可以方便记录各个位置。 1.2 使用方法 1.2.1 切换书签 设置或取消光标所在行的书签 方法1&#xff1a;选择主菜单查找 -> 书签 -> 切换书签 方法2&…...

【Hadoop】大数据权限管理工具Ranger2.1.0编译

目录 ​编辑一、下载 ranger源码并编译 二、报错信息 报错1 报错2 报错3 报错4 一、下载 ranger源码并编译 ranger官网 https://ranger.apache.org/download.html 由于Ranger不提供二进制安装包&#xff0c;故需要maven编译。安装其它依赖&#xff1a; yum install gcc …...

推荐算法实践:movielens数据集

MovieLens 数据集介绍 MovieLens 数据集是由明尼苏达大学的GroupLens研究小组维护的一个广泛使用的电影评分数据集&#xff0c;主要用于推荐系统的研究。该数据集包含用户对电影的评分、标签以及其他相关信息&#xff0c;是电影推荐系统开发与研究的常用数据源。 数据集版本 …...

基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试

基于 PyTorch 的树叶分类任务&#xff1a;从数据准备到模型训练与测试 1. 引言 在计算机视觉领域&#xff0c;图像分类是一个经典的任务。本文将详细介绍如何使用 PyTorch 实现一个树叶分类任务。我们将从数据准备开始&#xff0c;逐步构建模型、训练模型&#xff0c;并在测试…...

生成式语言模型技术全解析

一、引言 在人工智能领域&#xff0c;生成式语言模型&#xff08;Generative Language Models&#xff0c;GLMs&#xff09;无疑是近年来最为耀眼的明星。从早期的简单语言模型到如今如DeepSeek、Qwen 2.5 Max等具有强大能力的先进模型&#xff0c;它们在自然语言处理的各个方…...

香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。

简介&#xff1a; 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas&#xff0c;这是一种简化的视频合成系统&#xff0c;用于电影镜头设计&#xff0c;提供整体运动控制&#xff0c;以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…...

bazel 小白理解

Bazel命令是用于构建和测试软件项目的一个强大工具&#xff0c;尤其适用于大规模和多语言的软件项目。对于小白来说&#xff0c;可以这样理解Bazel及其命令&#xff1a; Bazel的基本概念 构建系统&#xff1a;Bazel是一个构建系统&#xff0c;它的主要任务是自动化地编译和链…...

基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能

一、介绍 蘑菇识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;基于TensorFlow搭建卷积神经网络算法&#xff0c;并收集了9种常见的蘑菇种类数据集【“香菇&#xff08;Agaricus&#xff09;”, “毒鹅膏菌&#xff08;Amanita&#xff09;”, “牛肝菌&…...

基于 STM32 平台的音频特征提取与歌曲风格智能识别系统

标题:基于 STM32 平台的音频特征提取与歌曲风格智能识别系统 内容:1.摘要 摘要&#xff1a;本文介绍了一种基于 STM32 平台的音频特征提取与歌曲风格智能识别系统。该系统通过对音频信号进行特征提取和分析&#xff0c;实现了对歌曲风格的自动识别。在特征提取方面&#xff0c…...

AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行

目录 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序目标设定与分解自主思考与决策信息交互与执行AUTOGPT是一款基于GPT模型开发的实验性开源应用程序 目标设定与分解 自主思考与决策 信息交互与执行 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序,它能让大语言模…...

DeepSeek底层揭秘——知识图谱与语料库的联邦学习架构

目录 1. 知识图谱与语料库的联邦学习架构 2. 技术要素 3. 技术难点与挑战 4. 技术路径 5. 应用场景 6. 最新研究与技术进展 7. 未来趋势 8. 实际案例 猫哥说 1. 知识图谱与语料库的联邦学习架构 (1) 定义 “知识图谱与语料库的联邦学习架构”是一种结合知识图谱&…...

MVVM设计模式

‌MVVM&#xff08;Model-View-ViewModel&#xff09;是一种软件设计模式,MVVM模式由三个主要部分组成&#xff1a; ‌Model&#xff08;模型&#xff09;‌&#xff1a;负责管理应用程序的业务逻辑和数据。它不关心UI如何展示数据&#xff0c;主要负责与服务器通信和数据处处…...

5.实时推荐系统的设计与实现

接下来我们将学习实时推荐系统的设计与实现。实时推荐系统需要处理大规模数据&#xff0c;并在用户交互时提供即时的推荐结果。这一课我们将介绍以下内容&#xff1a; 实时推荐系统的基本概念实时推荐系统的架构设计实时推荐系统的关键技术实践示例 1. 实时推荐系统的基本概念…...

分层解耦-ioc引入

内聚: 软件中各个功能模块内部的功能联系。 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度。 软件设计原则: 高内聚低耦合。...

Docker安装常用软件说明

1.总体步骤 2.安装tomcat docker run -d -p 8080:8080 --name tomcat1 tomcat:11.0.8 访问tomcat猫首页 出现404 这是正常情况 Docker 默认采用的是 NAT 网络模式&#xff0c;所以会自动创建 IPtable 规则并自动开放端口&#xff0c;所以无需考虑防火墙问题 新版Tomcat已经…...

陶氏环面包络减速机:为工业视觉检测注入“精准动力”!

在工业4.0时代&#xff0c;视觉检测技术已成为智能制造的核心环节。无论是精密电子元件的检测&#xff0c;还是汽车零部件的质量把控&#xff0c;视觉检测系统都需要极高的精度、稳定性和响应速度。而这一切&#xff0c;离不开一颗强大的“心脏”——陶氏环面包络减速机。 一、…...

标准日本语 导学

新版标准日本语-初级 结构 初级 上 初级 下 每章结构 教学方法...

vscode怎么更新github代码

vscode怎么更新github代码 打开终端&#xff1a; 在 VS Code 中&#xff0c;使用快捷键 Ctrl (Mac 上是 Cmd) 打开终端。 导航到项目目录&#xff1a; 确保你当前所在的终端目录是你的项目目录。如果不是&#xff0c;可以使用 cd 命令导航到项目目录&#xff0c;例如&#xf…...

【转载】开源鸿蒙OpenHarmony社区运营报告(2025年1月)

●截至2025年1月31日&#xff0c;开放原子开源鸿蒙&#xff08;OpenAtom OpenHarmony&#xff0c;简称“开源鸿蒙”或“OpenHarmony”&#xff09;社区累计超过8200名贡献者&#xff0c;共63家成员单位&#xff0c;产生51.2万多个PR、2.9万多个Star、10.5万多个Fork、68个SIG。…...

Pdf手册阅读(1)--数字签名篇

原文阅读摘要 PDF支持的数字签名&#xff0c; 不仅仅是公私钥签名&#xff0c;还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式&#xff0c;可以基于字节范围进行计算&#xff0c;也可以基于Pdf 对象&#xff08;pdf object&#xff09;进行计算。 PDF文件可能包…...

【C#】任务调度的实现原理与组件应用Quartz.Net

Quartz 是一个流行的开源作业调度库&#xff0c;最初由 Terracotta 开发&#xff0c;现在由 Terracotta 的一部分 Oracle 所有。它主要用于在 Java 应用程序中调度作业的执行。Quartz 使用了一种复杂的底层算法来管理任务调度&#xff0c;其中包括任务触发、执行、持久化以及集…...

HTML之JavaScript函数声明

HTML之JavaScript函数声明 1. function 函数名(){}2. var 函数名 function(){}<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…...

如何在 Qt 中添加和使用系统托盘图标

在 Qt 中实现系统托盘图标是一个常见的需求&#xff0c;尤其是在桌面应用程序中。系统托盘图标可以让应用程序在后台运行时仍然具有可见性&#xff0c;同时避免占用过多的桌面空间。本文将详细介绍如何在 Qt 项目中添加托盘图标&#xff0c;并通过资源系统&#xff08;.qrc 文件…...

day5QT套接字通信

Widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);objtimer new QTimer (this);//连接定时器的timeout信号到启动的槽函数//connect(objtimer,&…...

JVM速成=。=

JVM跨平台原理 跨平台&#xff1a;一次编译&#xff0c;到处运行 本质&#xff1a;不同操作系统上运行的JVM不一样&#xff0c;只需要把java程序编译成一份字节码文件&#xff0c;JVM执行不同的字节码文件。 Java是高级语言&#xff0c;提前编译一下&#xff08;变成字节码文件…...

操作系统中的任务调度算法

在多任务操作系统中&#xff0c;任务调度算法&#xff08;Task Scheduling Algorithm&#xff09;是决定CPU资源如何分配给进程或线程的核心机制。优秀的调度算法需要平衡响应时间、吞吐量和公平性&#xff0c;同时适应不同的应用场景。 任务调度的核心目标 CPU利用率最大化&a…...

第七节 文件与流

基本的输入输出&#xff08;iostream&#xff09; C标准库提供了一组丰富的输入/输出功能&#xff0c;C的I/O发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;键盘、磁盘驱动器、网络连接等&#xff09;流向内存&#xff0c;叫做输入操作。如果字节流是从…...

回首2024,展望2025

2024年&#xff0c;是个充满挑战与惊喜的年份。在这366个日夜里&#xff0c;我站在编程与博客的交汇点&#xff0c;穿越了无数的风景与挑战&#xff0c;也迎来了自我成长的丰收时刻。作为开发者的第十年&#xff0c;我依然步伐坚定&#xff0c;心中始终带着对知识的渴望与对自我…...

Ubuntu指令学习(个人记录、偶尔更新)

Ubuntu指令学习 0、一点常用指令列表一、Ubuntu下复制与移动&#xff0c;cp/mv二、Ubuntu下echo 与 重定向>,>>三、Ubuntu下chmod,用户权限四、Ubuntu下的tar打包&#xff0c;gzip压缩五、Ubuntu(22.04)下系统语言为中文&#xff0c;切换主目录文件名为英文。六、Ubun…...

【牛客】动态规划专题一:斐波那契数列

文章目录 DP1 斐波那契数列法1&#xff1a;递归法2&#xff1a;动态规划法3&#xff1a;优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict&#xff0c;在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1&#xff1a;递归 // 递归 #include <iostream>…...

HCIA-Access V2.5_13_1_1_VLAN类型

VLAN类型&#xff08;1&#xff09;Standard VLAN VLAN类型&#xff08;1&#xff09;-Smart VLAN Smart可以包含多个上行口&#xff0c;和多个业务虚端口(Service Port)&#xff0c;以太网端口在同一下VLAN中是互通的&#xff0c;但是业务虚端口&#xff0c;在同一个VLAN之间是…...

【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题

本篇博客给大家带来的是完全背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺…...

Android ndk兼容 64bit so报错

1、报错logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…...

极狐GitLab 17.8 正式发布,多项 DevOps 重点功能解读【一】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

java面试题

以下是一些Java面试题: 一、基础概念 Java中的基本数据类型有哪些?它们的默认值是什么? 答案: 基本数据类型有byte(字节型,默认值为0)、short(短整型,默认值为0)、int(整型,默认值为0)、long(长整型,默认值为0L)、float(浮点型,默认值为0.0f)、double(双精…...

C语言蓝桥杯1003: [编程入门]密码破译

要将"China"译成密码&#xff0c;译码规律是&#xff1a;用原来字母后面的第4个字母代替原来的字母&#xff0e; 例如&#xff0c;字母"A"后面第4个字母是"E"&#xff0e;"E"代替"A"。因此&#xff0c;"China"应译…...

react实例与总结(一)

目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…...

科技赋能直播!DeepSeek大模型+智享AI直播第三代plus版本,未来直播将更加智能化!

科技赋能直播&#xff01;DeepSeek大模型智享AI直播第三代plus版本&#xff0c;未来直播将更加智能化&#xff01; 能成事的人&#xff0c;都是懂得整合资源的高手。 要学会“万物不为我所有&#xff0c;万物皆为我所用。”的思维方式。 一个人的成就高低&#xff0c;在于他的…...

几种3D 旋转 的参数化形式

在 3D 空间中&#xff0c;旋转是 3 自由度的&#xff0c;刚体变换是 6 自由度的&#xff08;3自由度旋转3自由度平移&#xff09;。 3x3 的旋转矩阵有 9 个量&#xff0c;表达了 3自由度的旋转。 旋转矩阵是有 自约束的&#xff0c;即一个旋转矩阵是一个 正交矩阵&#xff0c;…...

【kubernetes组件合集】深入解析Kubernetes组件之三:client-go

深入解析Kubernetes组件之三&#xff1a;client-go 目录 深入解析Kubernetes组件之三&#xff1a;client-go 引言 1. client-go简介 2. client-go的功能 2.1 资源操作 2.2 资源监听 2.3 认证和授权 2.4 错误处理和重试 2.5 扩展性和定制化 3. 使用client-go与Kubern…...

强化学习概念入门

1 概述 强化学习&#xff0c;英文名为reinforcement learning&#xff0c;简称RL&#xff0c;是机器学习的一个分支&#xff0c;其想要解决的问题是智能体&#xff08;agent&#xff09;如何在复杂环境&#xff08;environment&#xff09;下最大化其能获得的奖励。 一般来说…...

自动控制视频讲解

本视频几乎包含了所有《自动控制原理》&#xff08;胡寿松&#xff09;所有重点章节。针对于考研都能满足。 视频内容包括但不限于&#xff1a;时域分析、信号流图、结构图绘制、跟轨迹、幅相曲线、稳定裕度、z变换、离散传递函数、数字控制器、稳定判据、相平面法、描述函数法…...

【Mastering Vim 2_01】开篇词:在 AI 时代持续深耕底层技术,做长期主义的坚定捍卫者

【最新版《Mastering Vim》封面&#xff0c;涵盖 Vim 9.0 版特性】 文章目录 1 背景&#xff1a;AI 时代的底层技术觉醒2 Vim&#xff1a;一款被严重低估的文本编辑神器3 聊聊 IT 人士的职业病4 进阶之道&#xff1a;构建完整的知识体系5 从 AI 时代的深耕与精进再谈长期主义 1…...