# 模板转换

### 定义

允许借助 Jinja2 的 Python 模板语言灵活地进行数据转换、文本处理等。

### 什么是 Jinja？

> Jinja is a fast, expressive, extensible templating engine.
>
> Jinja 是一个快速、表达力强、可扩展的模板引擎。

—— <https://jinja.palletsprojects.com/en/3.1.x/>

### 场景

模板节点允许你借助 Jinja2 这一强大的 Python 模板语言，在工作流内实现轻量、灵活的数据转换，适用于文本处理、JSON 转换等情景。例如灵活地格式化并合并来自前面步骤的变量，创建出单一的文本输出。这非常适合于将多个数据源的信息汇总成一个特定格式，满足后续步骤的需求。

**示例 1：** 将多个输入（文章标题、介绍、内容）拼接为完整文本

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FYy13dVflaqVEZzsfXVeX%2Fimage.png?alt=media&#x26;token=eac39909-565e-4a02-9a86-93a003eb2e4d" alt="" width="375"><figcaption><p>拼接文本</p></figcaption></figure>

**示例 2：** 将知识检索节点获取的信息及其相关的元数据，整理成一个结构化的 Markdown 格式

```

<div data-gb-custom-block data-tag="for">

### Chunk {{ loop.index }}. 
### Similarity: {{ item.metadata.score | default ('N/A') }}

#### {{ item.title }}

##### Content
{{ item.content | replace ('\n', '\n\n') }}

---

</div>
```

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FOtGkLaz38v0FSzSBNuV2%2Fimage.png?alt=media&#x26;token=122965f8-9d70-4e57-b0e2-1fdaf1320275" alt=""><figcaption><p>知识检索节点输出转换为 Markdown</p></figcaption></figure>

你可以参考 Jinja 的 [官方文档](https://jinja.palletsprojects.com/en/3.1.x/templates/)，创建更为复杂的模板来执行各种任务。

**示例 3：** 支持渲染 HTML 的表单

```html
<form data-format="json"> // Default to text
  <label for="username">Username:</label>
  <input type="text" name="username" />
  <label for="password">Password:</label>
  <input type="password" name="password" />
  <label for="content">Content:</label>
  <textarea name="content"></textarea>
  <label for="date">Date:</label>
  <input type="date" name="date" />
  <label for="time">Time:</label>
  <input type="time" name="time" />
  <label for="datetime">Datetime:</label>
  <input type="datetime" name="datetime" />
  <label for="select">Select:</label>
  <input type="select" name="select" data-options='["hello","world"]'/>
  <input type="checkbox" name="check" data-tip="By checking this means you agreed"/>
  <button data-size="small" data-variant="primary">Login</button>
</form>
```

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2Fgit-blob-62312bcb46fe2445efa270fd0c0cb8e904aadecb%2Fform_002.jpg?alt=media" alt="" width="375"><figcaption></figcaption></figure>
