> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-add-new-agent.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 模板

<Note> ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处，请参考[英文原版](/en/use-dify/nodes/template)。</Note>

模板节点使用 Jinja2 模板语法将来自多个来源的数据转换和格式化为结构化文本。使用它来组合变量、格式化输出，并为下游节点或最终用户准备数据。

<Frame caption="模板节点配置界面">
  <img src="https://assets-docs.dify.ai/2025/04/0838bb5c7e1d1a58ed30fcd9fc48920f.png" alt="Template node interface" />
</Frame>

## Jinja2 模板

模板节点使用 Jinja2 模板语法创建基于工作流数据自适应的动态内容。这提供了类似编程的功能，包括循环、条件判断和过滤器，用于复杂的文本生成。

### 变量替换

使用双花括号引用工作流变量：`{{ variable_name }}`。你可以使用点号和括号语法访问嵌套对象属性和数组元素。

```jinja theme={null}
{{ user.name }}
{{ items[0].title }}
{{ data.metrics.score }}
```

### 条件逻辑

使用 if-else 语句根据数据值显示不同内容：

```jinja theme={null}
{% if user.subscription == 'premium' %}
欢迎回来，高级会员！你可以访问所有功能。
{% else %}
考虑升级到高级会员以获得更多功能。
{% endif %}
```

### 循环和迭代

使用 for 循环处理数组和对象以生成重复内容：

```jinja theme={null}
{% for item in search_results %}
### 结果 {{ loop.index }}
**分数**: {{ item.score | round(2) }}
{{ item.content }}
---
{% endfor %}
```

<Frame caption="模板处理知识检索结果">
  <img src="https://assets-docs.dify.ai/2025/04/0ae3f13cf725cb2c52c72cc354e592ee.png" alt="Template formatting example" />
</Frame>

## 数据格式化

### 过滤器

Jinja2 过滤器在模板渲染期间转换数据：

```jinja theme={null}
{{ name | upper }}
{{ price | round(2) }}
{{ content | replace('\n', '<br>') }}
{{ timestamp | strftime('%B %d, %Y') }}
{{ score | default('无可用分数') }}
```

### 错误处理

使用默认值和条件检查优雅地处理缺失或无效数据：

```jinja theme={null}
{{ user.email | default('未提供邮箱') }}
{{ metrics.accuracy | round(2) if metrics.accuracy else '未计算' }}
```

## 交互式表单

模板可以生成交互式 HTML 表单，用于在聊天界面中进行结构化数据收集：

```html theme={null}
<form data-format="json">
  <label for="username">用户名:</label>
  <input type="text" name="username" required />
  
  <label for="priority">优先级:</label>
  <input type="select" name="priority" data-options='["low","medium","high"]'/>
  
  <label for="message">消息:</label>
  <textarea name="message" placeholder="输入你的消息"></textarea>
  
  <input type="checkbox" name="urgent" data-tip="标记为紧急"/>
  <button data-variant="primary">提交</button>
</form>
```

<Frame caption="在聊天界面中渲染的交互式表单">
  <img src="https://assets-docs.dify.ai/2025/04/9d24e9cfa3cdde00e4eee15bd4bbea76.png" alt="Interactive form rendering" />
</Frame>

当用户提交表单时，响应会成为结构化 JSON 数据，可立即在下游工作流节点中处理。

## 输出限制

模板输出限制为 **80,000 个字符**（可通过 `TEMPLATE_TRANSFORM_MAX_LENGTH` 配置）。这可以防止内存问题并确保大型模板输出的合理处理时间。

## 常见用例

**报告生成** - 将来自多个来源的数据组合成具有一致结构和样式的格式化报告。

**API 响应格式化** - 将内部数据结构转换为用户友好的格式以供外部使用。

**大型语言模型提示词准备** - 将复杂数据结构化为格式良好的提示词，以提高大型语言模型处理准确性。

**邮件和通知模板** - 基于用户数据和工作流结果生成具有动态内容的个性化消息。

\*\*数据转换据格式和结构之间进行转换，以便与外部系统集成。

## 最佳实践

**使用描述性变量名** 使模板可读且易于维护，特别是在处理复杂数据结构时。

**处理缺失数据** 使用默认值和条件检查来防止模板渲染错误。

**格式化以提高可读性** 通过使用适当的间距、换行符和格式来创建干净、专业的输出。

**使用示例数据测试** 确保模板处理边缘情况并在不同输入场景下产生预期结果。
