Django前端无法打开已上传PDF文件问题求助
解决Django前端无法打开上传的PDF文件问题
问题说明
在Django管理面板上传PDF文件后,文件已成功存储且后台可见,但前端通过<a href="{{ opinion.tests }}">标签点击时无法打开PDF,页面无报错,需实现前端正常访问该PDF的功能。
相关代码
HTML代码
<a href="{{ opinion.tests }}">Your tests</a> </div>
views.py代码
def report(request): if request.method == 'POST': try: name = request.POST['name'] phone1 = request.POST['phone'] print("name:", name, "phone", type(phone1)) analysis = Report.objects.filter(phone=phone1)[0] opinion = {'opinion': analysis} return render(request, "reports.html", opinion) except: return render(request,"not_found.html")
models.py代码
from datetime import datetime from django.db import models class Report(models.Model): current_date = str(datetime.date.today()) name= models.CharField(max_length=100) email= models.EmailField(max_length=1000) phone = models.IntegerField() previous_history =models.TextField(max_length=5000) current_diagnosis= models.TextField(max_length=5000) doctor = models.CharField(max_length=100) tests = models.FileField(upload_to='ptest/', default="") def __str__(self): return self.name + " | " + "Doctor : "+ self.doctor
解决方案
1. 修正模板中的文件链接
Django的FileField对象本身不是可访问的URL,需调用其url属性获取文件完整访问路径。修改HTML代码:
<a href="{{ opinion.tests.url }}">Your tests</a> </div>
2. 配置媒体文件服务(开发环境)
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') MEDIA_URL = '/media/'
- 在项目根目录的
urls.py中添加媒体路由:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), # 其他自定义路由 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 检查文件存储路径与权限
- 确认上传的PDF实际存储在
MEDIA_ROOT/ptest/目录下; - 确保服务器进程拥有该目录及文件的读取权限,避免因权限不足导致无法访问。
内容的提问来源于stack exchange,提问作者Abdul Moiz Shah
相关产品推荐
相关产品推荐

