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

Django报Directory indexes not allowed报错PDF预览失败解决方案

Django 点击预览PDF报「Directory indexes are not allowed here」修复方案

报错根因

这个报错是请求的静态/上传文件路径不正确,Django找不到对应文件,且默认禁止目录索引返回的错误,你的代码存在3个核心问题:

  • 视图传参和模板取值不匹配:ppts视图传给模板的单条学生记录变量是b,但ppts.html里取值用的是{{a.resume}},变量不匹配会导致渲染出来的文件路径为空
  • static标签用法错误:{% static ' ' %}{{a.resume}}的写法会在路径开头拼接一个多余空格,最终请求路径直接指向静态资源根目录,触发目录索引禁止的报错
  • 资源类型混用:简历类用户上传的文件属于media资源,不属于项目内置的static静态资源,用static标签处理本身就无法正确定位文件

分步修复

1. 修正视图层变量传递

把views.py里的ppts函数调整为语义更清晰的变量名,避免模板取值写错:

def ppts(request, id):
    stu = student.objects.get(id=id)
    return render(request, 'ppts.html', {'stu': stu})

2. 配置用户上传文件(media)的访问路由

如果resume字段是用户上传的文件,按下面的步骤配置:

  1. 在settings.py末尾添加media配置:
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. 在项目根urls.py中添加开发环境下的media文件服务映射:
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 此处保留你原有的所有路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注意:上述media路由配置仅适用于本地开发环境,生产环境需要用Nginx等Web服务直接托管static和media目录,不要让请求走Django服务处理

3. 修正模板中的PDF引用路径

把ppts.html里原来错误的embed标签替换为下面的写法,直接用模型文件字段的url属性获取访问地址,不要手动拼接路径:

<!-- 确保stu和视图里传的变量名一致 -->
<embed src="{{ stu.resume.url }}" height="700px" width="1500px">

如果你的PDF是提前存在static目录下的固定资源,不要用空格拼接路径,正确写法如下:

<embed src="{% get_static_prefix %}{{ stu.resume }}" height="700px" width="1500px">

4. 修复其他代码笔误

  • show.html里viewport标签属性写错:把content="width=>, initial-scale=1.0"改成content="width=device-width, initial-scale=1.0"
  • ppts.html里单独放置<td>不符合HTML语法规范,需要外层包裹<table><tr></tr></table>结构,否则浏览器会出现渲染异常

验证方式

修改完成后清除浏览器缓存,点击列表的预览按钮,右键查看embed标签的src属性,把地址复制到新标签页能直接打开PDF的话,就说明路径配置正确,预览功能可以正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:36:19