繼@ radtek的回答上面我決定調查基於類的視圖顯示。我試圖使用View
,但它沒有get_context_data()
方法。
我看了here的一些指導。我解決了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
評論
1此行訪問由URL調用視圖通過命名參數pk
。
2此行獲取實際的pdf模型對象。
3我在我的模型中定義了一個方法filename(self): return os.path.basename(self.file.name)
,以幫助我獲得文件名和擴展名。
4這一行獲取完整的文件路徑。
然後使用上面答案中所述的文件響應。還記得用rb
來閱讀pdf文件
,直到我改變了'它不爲我工作的MIME類型=的
login_required
要求'application/pdf' to'contenttype ='application/pdf'' – 2015-12-10 23:26:13content_type,也pdf.closed在那裏沒有效果 – amchugh89 2016-02-22 13:47:28
可以在關閉文件之前返回嗎?我想不是。 – azuax 2016-04-19 20:03:14