使用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。怎么办?
答案 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
});