【问题标题】:Jinja2 for word templatingJinja2 用于单词模板
【发布时间】:2015-02-12 21:27:39
【问题描述】:

我想使用 jinja2 进行文字模板,就像提到的 this 短文。我面临的问题如下,如果我将{{title}} 放在我的word 文件中,生成的xml 可能如下所示:

<w:r><w:t>{{</w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:t>title</w:t></w:r><w:proofErr w:type="gramEnd"/><w:r><w:t>}}</w:t></w:r></w:p>

所以 jinja 不可能相应地替换它。是否有可能防止单词将{{title}} 拆分为单独的文本元素? (如果我从文本编辑器复制它工作正常)

【问题讨论】:

    标签: python jinja2 template-engine docx


    【解决方案1】:

    https://pypi.org/project/docxtpl/ 也是一个不错的选择。

    它扩展了 python-docx,并允许您在现有 .docx 文档中的任意位置放置 Jinja2 标记,而不是从头开始模板。

    例子:

    pip install docxtpl
    

    用法:

    from docxtpl import DocxTemplate
    
    doc = DocxTemplate("my_word_template.docx")
    context = { 'company_name' : "Dr. Stubbs Orthopedics and Prosthetics" }
    doc.render(context)
    doc.save("generated_doc.docx")
    

    如果您的模板my_word_template.docx 文件如下所示:

    [

    那么您的generated_doc.docx 将如下所示:

    相对简单,对吧?

    【讨论】:

      【解决方案2】:

      这是一个文字问题,与 proofErr 标签有关。

      您有两种解决方案:

      • 如果你想坚持使用 Jinja2,你应该总是一口气写下你的标签。例如,永远不要按退格键或编辑标签。您也可以从其他编辑器复制/粘贴它。

      • 我写了一个库,Docxtemplater,即使文本元素被拆分也可以工作,例如它会替换:

        <w:r>
         <w:t>
           {{
         </w:t>
        </w:r>
        <w:proofErr w:type="gramStart"/>
         <w:r>
          <w:t>title</w:t>
         </w:r>
        <w:proofErr w:type="gramEnd"/>
         <w:r>
          <w:t>}}</w:t>
         </w:r>
        

        作者:

        <w:r>
          <w:t>
            Your title
          </w:t>
        </w:r>
        <w:proofErr w:type="gramStart"/>
        <w:r>
          <w:t></w:t>
        </w:r>
        <w:proofErr w:type="gramEnd"/>
        <w:r>
          <w:t></w:t>
        </w:r>
        

      Docxtemplater 可以通过 CLI 或 JS Browser/Node.JS 进行编程

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 2014-04-07
        • 2018-06-07
        • 2016-11-16
        相关资源
        最近更新 更多