按照上面@radtek 的回答,我决定研究基于类的视图显示。我尝试使用View但它没有get_context_data()方法。
我在这里寻找一些指导。我安顿下来,BaseDetailView因为我只想显示一个对象。
from django.http import FileResponse
from django.shortcuts import get_object_or_404
from django.views.generic.detail import BaseDetailView
class DisplayPdfView(BaseDetailView):
    def get(self, request, *args, **kwargs):
        objkey = self.kwargs.get('pk', None) #1
        pdf = get_object_or_404(Pdf, pk=objkey) #2
        fname = pdf.filename() #3
        path = os.path.join(settings.MEDIA_ROOT, 'docs\\' + fname)#4
        response = FileResponse(open(path, 'rb'), content_type="application/pdf")
        response["Content-Disposition"] = "filename={}".format(fname)
        return response
评论
pk1 此行访问由调用视图的 url 传递的命名参数。
2 此行获取实际的 pdf 模型对象。
3 我filename(self): return os.path.basename(self.file.name)在模型中定义了一个方法来帮助我只获取文件名和扩展名。
4 此行获取完整的文件路径。
然后按照上述答案中的说明使用文件响应。还记得使用rb阅读pdf文件