2017-04-06 88 views
1

我目前正在使用Django 1.87開發一個問題銀行網站,它允許用戶登錄並查看保存的過去問題。到目前爲止,我已經能夠根據用戶選擇在數據庫中顯示過去問題的鏈接。過去的問題將以文檔或PDF格式上傳並存儲在媒體目錄中。Django如何打開並顯示保存的docx或pdf文檔

我希望登錄的用戶能夠在決定是打印還是下載之前打開並閱讀過去問題的內容。到目前爲止,我已經能夠顯示文檔的鏈接列表,當我點擊鏈接時,它將文檔下載到我的電腦。我真正想要達到的目的是使用戶能夠單擊鏈接並從瀏覽器中打開文檔,然後單擊此處的下載擴展器代碼或打印。

這裏是我的代碼:

models.py

試題庫類(models.Model):

date = models.DateField(_("Date"),default=date.today) 
class_level = models.ForeignKey(ClassLevel) 
course_name = models.CharField(max_length=350) 
course_code = models.CharField(max_length=20) 
question_papers = models.FileField(upload_to = 'Question_Papers/  %y/%m/%d') 

views.py 畫質問題(要求,sel_course):

context = RequestContext(request) 
SelCourse = sel_course.replace('_',' ') 
context_dict = {'SelCourse':SelCourse} 

try: 
    Quest_For_course = QuestionBank.objects.filter(course_code = SelCourse) 
    context_dict['Quest_For_course'] = Quest_For_course 

except course_code.DoesNotExist: 
    pass 

return render_to_response('Qbank/QuestionsPage.html', context_dict, context) 

在我的模板中我有這個

QuestionsPage.html

<title> Question Papers </title> 

<body> 
    <h2> LIST OF QUESTION PAPERS FOR {{selCourse}} </h2> 

    <h3> Select question to view, download or print it</h3> 

    {% if Quest_For_course %} 

    <ul>{% for ques in Quest_For_course %} 

    <li><a href="{{ques.question_papers.url}}"> 

    {{ques.question_papers}} </a></li> 

    {%endfor%} 
    </ul> 

    {%else%} 
    <strong> THERE ARE NO AVAILABLE QUESTION FOR THIS CLASS AT THE MOMENT </strong> 
    {%endif%} 
</body> 

如何使過去詢問文檔視圖,能夠?在具有下載和打印按鈕的表單上。謝謝

+0

看看這個 - http://stackoverflow.com/questions/39919012/django-python-show-pdf-in-a-template – Compadre

+0

@Compadre我非常感謝這個推薦的鏈接,它真的有助於澄清我很困惑的事情。但現在我面臨着另一個挑戰和驅動堅果,因爲已經嘗試了很多方法來獲得文件工作的絕對路徑,我很困惑,不知道還有什麼要做。這裏是我所做的 – jids

+0

有人應該請幫助我,我堅持我不知道還有什麼要嘗試。這裏的代碼給了我想要輸出的文件的絕對路徑file_path = os.path.join(settings.MEDIA_ROOT,'QuestionPapers',File_Name)但我仍然得到FileNotFoundError – jids

回答

0

如果我返回HttpResponse(file_path),它將返回我想要打開的文件的絕對路徑。當我運行下面的代碼,我得到:

異常類型:?「FileNotFoundError

爲什麼蟒沒有看到文件,即使在絕對路徑是正確的請幫忙:

def Display(request, file_name): 

    File_Name = file_name.replace('_', ' ') 
    file_path = os.path.join(settings.MEDIA_ROOT, 'QuestionPapers',File_Name) 

    with open(file_path,'r') as pdf: 
     response = HttpResponse(pdf.read(), content_type = 'application/pdf') 
     response['Content-Disposition'] = 'attachment;filename=some_file.pdf' 
    return response 
相關問題