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

切换网络连接后Weasyprint无法渲染图片及静态文件问题求助

问题核心结论

Weasyprint在联网状态下本身可正常工作,你遇到的问题大概率是网络环境差异导致的资源加载路径/访问权限问题,以下是具体排查和解决步骤:

一、检查静态/媒体文件的URL配置

  • 若模板中使用绝对URL(如https://your-domain.com/static/css/report.css),先在服务器上执行curl https://your-domain.com/static/css/report.css测试,确认光纤网络下服务器域名/IP能被本地访问。若失败,排查DNS解析、防火墙规则或端口开放情况。
  • 若使用相对URL(如/static/css/report.css),生成PDF时必须给Weasyprint指定base_url参数,确保相对路径能被正确解析:
    from django.template.loader import render_to_string
    from django.contrib.staticfiles.storage import staticfiles_storage
    from weasyprint import HTML
    
    html_content = render_to_string('report_template.html', context)
    # 用Django静态存储获取基础URL,或直接指定服务器内部地址
    base_url = staticfiles_storage.base_url  # 或 base_url = 'http://localhost:8000/'
    pdf = HTML(string=html_content, base_url=base_url).write_pdf()
    

二、排查网络环境限制

  • 光纤网络可能存在防火墙、代理或内网隔离,阻止Weasyprint访问静态资源的外部URL。可尝试用本地文件路径加载资源,比如将模板中的静态资源URL替换为file:///path/to/your/static/css/report.css测试。
  • 离线时无法加载资源是因为Weasyprint默认通过网络请求资源,此时可将CSS内容直接内联到HTML模板,或提前把静态资源转换为本地路径加载。

三、配置Django的ALLOWED_HOSTS和静态文件服务

  • 确保settings.py中的ALLOWED_HOSTS包含光纤网络下服务器的IP或域名,否则Django会拒绝Weasyprint的请求:
    # settings.py
    ALLOWED_HOSTS = ['your-domain.com', '192.168.x.x', 'localhost']
    
  • 生产环境需确认已执行python manage.py collectstatic收集静态文件,且Nginx等静态文件服务配置正确,光纤网络下能正常访问静态资源。

四、尝试升级Weasyprint版本

Weasyprint 53.4是较旧版本,可能存在资源加载的已知bug,升级到最新稳定版可能解决问题:

pip install --upgrade weasyprint

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:09:45