2016-08-11 35 views
0

我的主要任務是讓用戶按下一個下載按鈕並從查詢目錄下載文件「A.zip」。允許用戶從Django視圖下載ZIP

我有一個elif request.POST .....的原因是因爲我有另一個條件檢查是否按下了「Execute」按鈕。這個執行按鈕運行一個腳本。這兩個POST操作都起作用,並且dir_file是C:\ Data \ Folder。

我遵循並閱讀了很多關於如何從Django下載文件的教程和響應,我無法弄清楚爲什麼我的簡單代碼沒有下載文件。

我錯過了什麼?該代碼不會返回任何錯誤。有沒有人有任何文件可以解釋我做錯了什麼?

我期待自動下載該文件,但不會發生。

elif request.POST['action'] == 'Download': 
    query = request.POST['q'] 
    dir_file = query + "A.zip" 
    zip_file = open(dir_file, 'rb') 

    response = HttpResponse(zip_file, content_type='application/zip') 
    response['Content-Disposition'] = 'attachment; filename=%s' % 'foo_zip' 

    zip_file.close() 

回答

0

我發現了我的答案。

閱讀了許多有關此文檔後,我忽略了此功能的最重要方面,即url

基本上,POST函數download_zip被調用,並運行下載zip文件的腳本。

這裏是我落得這樣做:

elif request.POST['action'] == 'Download': 
     return(HttpResponseRedirect('/App/download')) 

創建的視圖:

def download_zip(request): 
    zip_path = root + "A.zip" 
    zip_file = open(zip_path, 'rb') 
    response = HttpResponse(zip_file, content_type='application/zip') 
    response['Content-Disposition'] = 'attachment; filename=%s' % 'A.zip' 
    response['Content-Length'] = os.path.getsize(zip_path) 
    zip_file.close() 

    return response 

最後在urls.py:

url(r'^download/$', views.download_zip, name='download_zip'),