2013-12-09 15 views
0

我在我的main project目錄中有一個pdf文件。我應該如何在主urls.py文件中添加此文件,以便將此文件鏈接到<a href>標記中。在Django的網址中包含pdf文件

編輯

我得到兩個日期,開始和結束日期,通過AJAX。我處理這兩個日期的數據,生成一個報告,然後返回一個HttpResponse。 PDF報告現在保存在我的主項目目錄中。現在我收到了AJAX的回覆。那麼,現在我該如何處理成功功能中的響應,從服務器發回並打開PDF文件。

謝謝。

jQuery的

$(function() { 
    $("#report_submit").click(function(){ 
     $.ajax({ 
     type : "POST", 
     url: "/reports/", 
     data : { 'start_date' : $("#startDate").val() , 'end_date' : $("#endDate").val() }, 
     success : function(result){ 

     }, 

     error : function(result){ 
     } 
    }); 

    }); 
}); 

的Django視圖代碼

def generate_report(request): 
    ctx = {} 



if request.is_ajax(): 
     if request.POST.has_key('start_date'): 
      start_date = datetime.strptime(request.POST[ 'start_date'] , '%m/%d/%Y') 
      end_date = datetime.strptime(request.POST[ 'end_date'] , '%m/%d/%Y') 

      ...... 
      # PDF GENERATED in MAIN PROJECT DIRECTORY 

      with open(os.path.join(os.path.dirname(__file__),'../../../../gui','Report.pdf')) as pdf: 
       response = HttpResponse(pdf.read(), content_type='application/pdf') 
       response['Content-Disposition'] = 'inline;filename=Report.pdf' 

       return response # so, now when I send a response back, how should I process it in AJAX success function? 
      pdf.closed 


    return render(request, 'generate_report/reports.html', ctx) 

回答

1

您可以通過兩種方式,這取決於你的應用程序

  1. 添加PDF的要求,做到這一點文件到聖atic目錄並從那裏提供服務。畢竟PDF文件真的只是一個靜態資源。

  2. 但是,如果您需要在向用戶提供文件之前進行一些檢查,例如,只允許經過身份驗證的用戶訪問它,然後編寫一個視圖,該視圖將執行必要的檢查,然後使用適當的響應標頭提供文件內容。見例如here

編輯OP更新後的問題

AJAX是絕對必要的嗎?萬一它是我可以想到以下內容:

由於您提到正在生成報告,我會假設未經過身份驗證,並且沒有授權用戶不應該能夠訪問報告。

一種方法是將生成的pdf文件存儲在某個位置(靜態目錄之外),並將生成的文件的名稱和可以在數據庫表中訪問的用戶的ID保存在記錄中。然後該請求可以簡單地以文件的名稱作出響應。

在ajax的成功回調中,在一個單獨的選項卡中打開一個視圖的URL以及作爲get參數的文件名。該視圖將檢查用戶是否可以訪問該文件並進行提供。

再說一次,如果阿賈克斯不是一個要求,所有這些複雜性都可以避免

+0

我試過了。 (os.path.join(os.path.dirname(__ file __),'../../../gui','Report.pdf'))as pdf: \t \t \t \t \t響應= HttpResponse(pdf.read(),content_type ='application/pdf') \t \t \t \t response ['Content-Disposition'] ='inline; filename = Report。PDF」 \t \t \t \t迴響應 \t \t \t pdf.closed' – PythonEnthusiast

+0

它仍然無法獲取客戶端的PDF文件。 – PythonEnthusiast

+0

看到我編輯的問題。謝謝。 – PythonEnthusiast