You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用docxtpl为文本添加标题层级?

首先你尝试的rt.add('Headername', level=1)写法无法实现需求,RichText的add方法没有提供level参数,不能直接通过该参数设置标题层级。

正确实现标题层级的三种常用方式

1. 模板预定义样式(最简单常用)

直接在你的docx模板文件中插入占位符,给占位符手动设置Word内置的「标题1」「标题2」等标题样式,渲染时直接传值即可:

from docxtpl import DocxTemplate

tpl = DocxTemplate("模板文件路径.docx")
context = {
    "first_level_heading": "这是一级标题",
    "second_level_heading": "这是二级标题"
}
tpl.render(context)
tpl.save("输出文件路径.docx")

2. 动态指定层级用Subdoc实现

如果需要在代码中动态控制标题层级,可通过Subdoc调用python-docx的原生add_heading方法实现:

from docxtpl import DocxTemplate, Subdoc

tpl = DocxTemplate("模板文件路径.docx")
# 创建子文档对象
heading_subdoc = Subdoc(tpl)
# add_heading第二个参数为标题层级,支持1-9级
heading_subdoc.add_heading("动态生成的一级标题", level=1)
heading_subdoc.add_heading("动态生成的二级标题", level=2)

context = {
    "dynamic_headings": heading_subdoc
}
tpl.render(context)
tpl.save("输出文件路径.docx")

通过该方式生成的标题会自动纳入Word的目录索引,后续插入目录可直接识别。

3. 配合RichText使用指定样式

如果确实需要用RichText实现,可给RichText指定模板中已有的标题样式:

from docxtpl import DocxTemplate, RichText

tpl = DocxTemplate("模板文件路径.docx")
# style参数值要和模板里的标题样式名完全匹配,中文Office默认是「标题 1」,英文Office是「Heading 1」
rt = RichText("RichText实现的一级标题", style="标题 1")
context = {
    "rt_heading": rt
}
tpl.render(context)
tpl.save("输出文件路径.docx")

注意事项

  • 所有涉及样式名的参数,取值必须和Word模板里的样式名称完全一致,大小写、空格都不能有差异,否则样式不会生效。
  • 如需自定义标题格式,可提前在模板中修改对应标题样式的字体、段落格式,渲染后会自动继承。

内容的提问来源于stack exchange,提问作者Johs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:05