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

Django项目中MEDIA_URL无法展示media文件夹内PDF链接问题求助

问题根因排查&修复方案

  • 前端模板逻辑错误:当前仅判断了MEDIA_URL是否存在,没有读取并遍历media目录下的实际PDF文件,且MEDIA_URL只要配置就会有值,会导致else分支永远无法触发,也无法渲染单个PDF的访问链接
  • 视图层数据传递缺失:没有把media目录下的PDF文件列表、MEDIA_URL注入到模板上下文,模板没有对应数据自然无法渲染链接
  • 路由配置不规范:br路径末尾未加斜杠,Django默认会对末尾无斜杠的路径做301重定向,可能导致资源路径拼接异常

1. 修正views.py代码

import os
from django.conf import settings
from django.core.files.storage import FileSystemStorage

def upload(request):
    # 读取media目录下所有PDF文件
    pdf_files = []
    media_path = settings.MEDIA_ROOT
    if os.path.exists(media_path):
        for file_name in os.listdir(media_path):
            if file_name.lower().endswith('.pdf'):
                pdf_files.append(file_name)
    
    if request.method == 'POST' and request.FILES.get('upload'):
        upload = request.FILES['upload']
        fss = FileSystemStorage()
        file = fss.save(upload.name, upload)
        file_url = fss.url(file)
        # 上传后刷新PDF文件列表
        if upload.name.lower().endswith('.pdf'):
            pdf_files.append(upload.name)
        return render(request, 'website/upload.html', {
            'file_url': file_url,
            'pdf_files': pdf_files,
            'MEDIA_URL': settings.MEDIA_URL
        })
    return render(request, 'website/upload.html', {
        'pdf_files': pdf_files,
        'MEDIA_URL': settings.MEDIA_URL
    })

2. 修正前端模板代码

<h1 class="my-4">Batch Records</h1>
<div class="row">
  {% if pdf_files %}
    <div class="col-lg-4 col-md-6 col-sm-12 pb-4">
      <p>Uploaded PDFs:</p>
      <ul>
        {% for pdf in pdf_files %}
          <li><a href="{{ MEDIA_URL }}{{ pdf }}" target="_blank">{{ pdf }}</a></li>
        {% endfor %}
      </ul>
      <a class="btn btn-dark my-4" href="/">Return to Homepage</a>
    </div>
  {% else %}
    <p>No records added.</p>
  {% endif %}
</div>

3. 修正urls.py路由配置

urlpatterns = [
    path("br/", views.upload, name="upload")
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

额外校验项

  • 确认当前运行环境为调试模式(DEBUG = True),生产模式下Django默认不处理静态/media资源,需要搭配Nginx等反向代理服务实现资源访问
  • 确认项目media目录及内部PDF文件具备可读权限,PDF文件本身无损坏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:06:05