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里的代码逻辑
你的代码里有几个明显的问题,就算权限搞定了也没法正确返回文档:
- 重复赋值
response变量,导致第一个基于文件内容的HttpResponse直接被覆盖 - 打开Word文档要用二进制模式(
rb),因为Word是二进制文件,文本模式打开会损坏内容 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
相关产品推荐
相关产品推荐

