2016-07-14 46 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

相关问题