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

Django中如何读取media文件夹内PDF并按ID在HTML页面展示?

解决Django中无法按ID展示media文件夹内PDF的问题

核心问题分析

你的代码里PDF链接是固定的/pdfview/,没有关联每条数据的ID,同时可能缺少media路径的正确配置,导致无法定位到对应PDF文件。


步骤1:确保Django媒体文件配置正确

首先在settings.py中配置媒体文件路径:

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 媒体文件存储路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 媒体文件访问URL前缀
MEDIA_URL = '/media/'

然后在项目根目录的urls.py中添加媒体文件的路由映射:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的其他路由配置,比如admin、admin_project等
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

步骤2:根据需求选择PDF展示方案

方案一:直接链接到media中的PDF文件(简单快捷)

假设你的helpingtable模型中有一个FileField字段存储PDF,比如:

class helpingtable(models.Model):
    # 其他字段
    help_pdf = models.FileField(upload_to='pdfs/', verbose_name='项目PDF')

直接在模板中使用字段的url属性生成链接:

{% for i in prid %}
    <tr>
      <td>{{i.id}}</td>
      <td>{{i.help_name}}</td>
      <td>{{i.help_service}}</td>
      <td>{{i.help_budget}}</td>
      <!-- 修改这里的PDF链接 -->
      <td><a href="{{ i.help_pdf.url }}" target="_blank">view file</a></td>
      <td>{{i.help_message}}</td>
      <td style="font-weight: bold;">{{i.help_status}}</td>
      <td id="click" ><a href="/adminprojectsurvey/?surveyid={{i.id}}"> click to survey</a></td>
    </tr>
{% endfor %}

方案二:通过视图中转展示PDF(适合需要权限验证或额外处理的场景)

  1. 添加路由:在urls.py中新增带ID的PDF视图路由
path('pdfview/<int:pk>/', views.pdf_view, name='pdf_view'),
  1. 编写视图函数:在views.py中实现pdf_view函数,根据ID获取对应PDF并返回
from django.http import FileResponse
import os
from django.conf import settings
from .models import helpingtable

def pdf_view(request, pk):
    # 根据ID获取项目数据
    project = helpingtable.objects.get(pk=pk)
    # 拼接PDF文件的绝对路径
    pdf_full_path = os.path.join(settings.MEDIA_ROOT, str(project.help_pdf))
    # 返回PDF文件响应
    return FileResponse(open(pdf_full_path, 'rb'), content_type='application/pdf')
  1. 修改模板链接:使用url模板标签生成带ID的链接
{% for i in prid %}
    <tr>
      <!-- 其他字段不变 -->
      <td><a href="{% url 'pdf_view' i.id %}" target="_blank">view file</a></td>
      <!-- 其他字段不变 -->
    </tr>
{% endfor %}

验证要点

  1. 确认media文件夹中存在对应ID的PDF文件,且路径与模型upload_to配置一致
  2. 直接访问媒体文件URL(如http://localhost:8000/media/pdfs/xxx.pdf),检查是否能正常打开,排除路径配置问题
  3. 若使用方案二,确保视图中能正确获取到项目数据,且文件路径无误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:46:00