के लिए काम किया @ 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 यह पंक्ति एक नामित तर्क pk
यूआरएल दृश्य को फोन करके पारित कर दिया एक्सेस करता है।
2 इस लाइन वास्तविक पीडीएफ मॉडल वस्तु हो जाता है।
3 मैंने अपने मॉडल में एक फ़ाइल filename(self): return os.path.basename(self.file.name)
परिभाषित किया ताकि मुझे फ़ाइल नाम और विस्तार प्राप्त करने में मदद मिल सके।
4 यह लाइन पूरी filepath हो जाता है। जैसा कि ऊपर जवाब में विस्तार से बताया
फिर फ़ाइल प्रतिक्रिया का उपयोग करें। पीडीएफ फ़ाइल
यह मेरे लिए काम नहीं करता है जब तक मैं 'बदल दिया है माइम प्रकार = में
login_required
आवश्यकता का समाधान नहीं करता 'आवेदन/pdf' 'contenttype = करने के लिए' आवेदन/pdf'' –content_type, यह भी pdf.closed वहाँ – amchugh89
कोई प्रभाव नहीं है यह ठीक से पहले करीब फ़ाइल वापसी है ??? मुझे नहीं लगता। – azuax