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

如何在Django环境下用Python docxtpl通过URL添加InlineImage图片

解决方案

核心原理

docxtpl的InlineImage仅支持本地文件路径、字节流、类文件对象作为图片源,不支持直接传入网络URL,你遇到的报错就是因为程序把URL当作本地磁盘路径去读取,自然会触发路径无效的异常。

你不需要将远程图片存储到本地磁盘,只需要先将图片内容下载到内存中,转成类文件对象再传入即可。


实现步骤

  1. 先安装依赖(如果项目中还没有安装requests):
pip install requests
  1. 代码实现示例:
import requests
from io import BytesIO
from docxtpl import DocxTemplate, InlineImage
# 如果需要指定图片尺寸,额外导入单位类
from docx.shared import Mm

# 你的DocxTemplate实例
document = DocxTemplate("你的模板路径.docx")

# 远程图片URL
img_url = "https://files-cdn.myhost.net/3255/ddef9d07-0a6b-4f54-801a-c016e6d41885/myimage.png"

# 下载图片到内存
resp = requests.get(img_url, timeout=10)
# 校验请求是否成功,可自行包裹try-except捕获异常处理异常场景
resp.raise_for_status()

# 转为BytesIO类文件对象
img_file = BytesIO(resp.content)

# 生成InlineImage对象,可自行指定宽高
inline_img = InlineImage(document, img_file, width=Mm(50))

# 后续正常把inline_img传入模板渲染即可

注意事项

  • 网络请求建议加超时参数,避免服务端出现长时间阻塞
  • 可以根据业务需要捕获requests.exceptions.RequestException类型的异常,处理图片下载失败的场景
  • 整个过程全部在内存中完成,不会产生本地临时文件,适配Django服务端运行场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:03