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

Django中使用python-docx-template(docxtpl)如何在docx模板中渲染显示图片?

解决方案

错误原因

你当前直接将图片URL字符串传入上下文,模板会默认按照普通文本渲染,python-docx-template需要接收InlineImage类型的对象才能识别为图片内容渲染。

调整步骤

1. 安装依赖

需要先安装requests库用于下载远程图片:

pip install requests

2. 修改视图函数代码

新增远程图片下载逻辑,将图片封装为InlineImage对象后再传入上下文:

from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm
import requests
from io import BytesIO
from django.conf import settings
from django.http import HttpResponse

def generaraDocumento(request):
    # 调整响应头为docx正确的MIME类型,避免客户端识别错误
    response = HttpResponse(
        content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    )
    response['Content-Disposition'] = 'attachment; filename="cv.docx"'

    doc = DocxTemplate(str(settings.BASE_DIR) + '/cv_api/templates/docx_filename.docx')
    
    # 下载远程图片
    img_resp = requests.get(docente['foto_web_low'], timeout=10)
    # 可自行扩展异常处理逻辑,比如请求失败时使用本地默认占位图
    img_resp.raise_for_status()
    
    # 封装为InlineImage对象,可自定义宽高参数
    imagen = InlineImage(
        doc,
        BytesIO(img_resp.content),
        width=Mm(35) # 示例设置图片宽度为35毫米,可按需调整
    )

    context = {'imagen': imagen}
    doc.render(context)
    doc.save(response)

    return response

3. 模板占位符调整

无需修改原有模板占位符,保持{{ imagen }}即可正常渲染图片。

可选优化

  • 图片请求失败时,加载本地默认占位图片传入InlineImage,避免报错
  • 可根据图片原始比例动态计算宽高,避免图片拉伸变形

内容的提问来源于stack exchange,提问作者Fernando Javier León

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:33:02