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

Django生成MailMerge Word文档后无法展示,遇Errno13权限错误

解决Django中生成Word文档时的权限错误与代码问题

你现在碰到了两个核心问题:文件权限被拒绝,还有代码逻辑里的小bug,咱们一步步来搞定:

一、先解决权限拒绝(Errno 13)问题

这个错误的本质是:你的Django应用进程没有访问路径C:\GROWTHTECH\Projetos\blockchain\media_root/procuracao的权限。可以按这几步排查:

  • 检查目标文件夹/文件的权限:右键路径里的procuracao(不管是文件夹还是文件)→ 属性 → 安全选项卡,确保运行Django的用户(本地开发就是你的Windows账号,生产环境可能是www-data这类服务账号)拥有读取+写入权限。
  • 如果procuracao是文件,确认它没有被其他程序锁定(比如你正用Word打开它),锁定状态下也会触发权限拒绝。

二、修复views.py里的代码逻辑

你的代码里有几个明显的问题,就算权限搞定了也没法正确返回文档:

  1. 重复赋值response变量,导致第一个基于文件内容的HttpResponse直接被覆盖
  2. 打开Word文档要用二进制模式(rb),因为Word是二进制文件,文本模式打开会损坏内容
  3. Content-Disposition的格式不对,文件名需要加引号,变量也要正确插入

修改后的代码示例:

# 先确保var_nomdocumento_output是你定义好的文件名(比如"procuracao_output.docx")
with open(file_path, 'rb') as doc:  # 用rb模式打开二进制文件
    # 用更准确的docx内容类型替代旧的application/ms-word
    response = HttpResponse(doc.read(), content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
    # 格式化文件名,加引号避免特殊字符问题
    response['Content-Disposition'] = f'attachment; filename="{var_nomdocumento_output}"'
    return response  # 别忘了返回response对象

额外提醒:

  • 确认file_path是完整的文件路径(比如C:\GROWTHTECH\Projetos\blockchain\media_root/procuracao.docx),而不是文件夹路径——如果指向文件夹,open函数会尝试打开文件夹,同样会报错。
  • 生成文件时,要确保MailMerge已经成功把文件保存到了file_path对应的位置,且保存过程没有权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:23