Django重定向不适用于dropzone.js

时间:2019-01-22 06:16:48

标签: django redirect dropzone

使用Dropzone.js上传文件时,Django中的重定向不起作用,因此我在Dropzone windows.href事件中使用了success,但是我必须传递一个参数。

views.py:

if request.method == 'POST' and request.FILES['files']:
    ...
    if form.is_valid():
        ....
        user = User.objects.get(email=email)
        id = user.id
        return redirect(reverse('success', kwargs={'id': id})) <<-- not working 

JQuery-Dropzone:

this.on('success', function() {
    window.location.href = '/success/';
})

在这种情况下,我不认为有一种方法可以将id传递给JQuery,因此我必须在Django中使用redirect。怎么办?

1 个答案:

答案 0 :(得分:0)

django重定向不起作用的原因是因为dropzone.js将AJAX用于其不重定向页面的帖子请求。

要使重定向正常工作,您需要使dropzone能够使用javascript重定向到作为POST请求响应给出的正确URL。该视图返回一个JSON响应,然后可以从js中进行解析。这样做如下:

from django.http import JsonResponse

def index(request):

    if request.method == 'POST':
        form = BenchmarkForm(request.POST, request.FILES)
        if form.is_valid():

            model_id = YourModel.objects.create(file=request.FILES['file']).id

            link = reverse('energy:benchmark',kwargs={'id':model_id})

            response = {'url':link} 

            return JsonResponse(response)

然后在dropzone init函数中,您需要解析成功回调中的响应。

 Dropzone.options.myDropzone = {

                // Prevents Dropzone from uploading dropped files immediately
                autoProcessQueue : false,
                url: "{% url 'energy:index' %}",

                headers: {
                     "X-CSRFToken": "{{ csrf_token }}"
                },

                init : function() {
                    mydropzone = this;

                    this.on("success", function(file, response) {
                        window.location.href=JSON.parse(file.xhr.response).url
                    });