2016-07-14 71 views
0

我想在django通過響應提供下載文件後重定向到成功頁面。 我需要做什麼?返回附件響應後重定向到成功頁面

每次用戶請求時,django都會生成文件,因此它在目錄中沒有真實文件。

「content」變量只是.ical格式的字符串。

def index(request): 
    if request.method == 'POST': 
     form = UploadText(request.POST) 
     if form.is_valid(): 
      data = convert2calendar(form.cleaned_data['regHtml']) 
      open_day = form.cleaned_data['open_date_semester'] 
      end_day = form.cleaned_data['end_date_semester'] 

      content = create_ical_download(open_day, end_day, data) 

      response = HttpResponse(content_type='text/ics') 
      response['Content-Disposition'] = 'attachment; filename="export.ics"' 
      response.write(content) 
      return response 
    else: 
     form = UploadText() 
    return render(request, 'genclass/index.html', {'form': form}) 

謝謝你的幫忙。

+0

沿'返回HttpResponseRedirect(self.success_url)'在 「有效」 的代碼塊的結尾應該做的東西線。 – Evert

+1

這不能工作,因爲OP已經將附件作爲響應返回。沒有辦法做到這一點;你不能返回兩個響應。 –

+0

好吧,那麼你有什麼可以用這種方式來提供下載文件而無需返回響應嗎? –

回答

0

你應該通過在客戶端重定向來做到這一點!

JS代碼

document.getElementById('link-with-redirect').addEventListener('click', function() { 
    setTimeout(function() { 
    // Should be triggered after download started 
    document.location.href='{% url "redirect_destination" %}'; 
    }); 
}, false); 

HTML代碼

<a href="{% url 'file_to_download' %}" id="link-with-redirect">Click here to download Django 1.9</a> 
+0

這點擊鏈接後立即重定向,而不是成功下載後。這就是我對這個問題的理解。 – BlackJack