点击导出PDF按钮触发wkhtmltopdf错误:ContentNotFoundError求助
排查wkhtmltopdf导出PDF时的ContentNotFoundError错误
错误信息
wkhtmltopdf reported an error: Exit with code 1 due to network error: ContentNotFoundError
可能的原因及解决方法
1. 目标URL路径错误
你在pdfkit.from_url中使用的URL是'http://127.0.0.1:8000/'+str(c.id),需先确认该URL对应的页面是否存在且可正常访问:
- 手动在浏览器中访问
http://127.0.0.1:8000/[你的pk值],检查能否加载目标页面。若无法访问,说明路径错误,需修正为正确的详情页URL。 - 推荐用Django的URL反向解析生成路径,避免手动拼接出错:
from django.urls import reverse # 假设候选人详情页的URL名称为'candidate_detail' detail_url = reverse('candidate_detail', args=[c.id]) full_url = request.build_absolute_uri(detail_url) pdf = pdfkit.from_url(full_url, False, options=options)
2. 服务器端口或地址不匹配
确认你的Django服务器实际运行的端口和地址:
- 若服务器未运行在
127.0.0.1:8000(比如用python manage.py runserver 0.0.0.0:8001启动),需修改from_url中的地址为实际的服务器地址和端口。
3. Cookie传递有效性问题
虽然你传递了csrftoken和sessionid,但需验证:
- 目标页面是否需要登录权限?若是,传递的
sessionid是否与当前用户的有效session一致?可打印cookies['sessionid']确认正确性。 - 检查CSRF令牌是否有效,部分视图需正确传递CSRF令牌才能访问,可临时在目标视图添加
@csrf_exempt(仅用于测试),确认是否因CSRF验证导致访问失败。
4. 服务器网络访问限制
- 若在生产环境使用Nginx、Apache等反向代理,
127.0.0.1:8000可能无法被wkhtmltopdf访问。此时需使用服务器的外部可访问地址,或配置反向代理允许本地访问。 - 在服务器上执行
curl http://127.0.0.1:8000/[pk],检查能否获取页面内容,确认wkhtmltopdf所在环境可访问目标URL。
5. 页面资源加载问题
若目标页面包含外部资源(如图片、CSS)加载失败,也可能触发类似错误。检查页面控制台是否有资源加载失败提示,确保所有资源均可正常访问。
内容的提问来源于stack exchange,提问作者Azeez Soliudeen
相关产品推荐
相关产品推荐

