Saphire_80
Saphire_80

Reputation: 33

Django submit a form->redirect to a new page->auto update new page

Ok as the title describes, Im trying to create a webpage(test.html) where in after the form is submitted it should redirect me to a new page(say status.html).And after this page loads It should shows some continuous updates on the submitted task. I was able to accomplish this on a single page , when Im trying to redirect this to a new page Im out of luck.

test.html

<form action="status/" method="POST" id="start-form">
.....
<input type="submit" value="Start" class="tbutton">

views.py

def status_page(request):
print("Inside redirect")
return HttpResponseRedirect(request,'my_app/status.html')

url.py

url(r'^test/status/$', 'status_page'),

jav.js

$('#start-form').on('submit',function(event){
event.preventDefault();    
status(); 
}); 
function status() { 
$.ajax({
    url : "status_page/", // the endpoint
    type : "POST", // http method
    data:{' ': '',}, // data sent with the post req
headers: {Accept: "application/json"},  
   success : function(json) {
//on success display the rendered page,so what coding is needed here?   
},
    error : function(xhr,errmsg,err) {
//error handling code    }
    });
 }

On execution the new page is not loaded, but if I bypass javascript then the form action gets executed and the new page rendering through the view happens. But with JavaScript, on success what happens ? how does the return statement from the view get captured in the success and how is the page displayed? I need to use javascript and AJAX as once the new page is loaded I need to display continuous updates on the same page. So basically how do I implement redirection to a new page with the above code using javascript and Django? Any help will be truly appreciated!

Upvotes: 1

Views: 2862

Answers (1)

Aakash Rayate
Aakash Rayate

Reputation: 934

In your views.py, HttpResponseRedirect is used incorrectly. If you want to redirect to a new page, then you should use,

return HttpResponseRedirect('/url-where-you-want-to-redirect/')

As HttpResponseRedirect expects url paramter instead of template name.

See here: https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.HttpResponseRedirect

Better approach would be to return a JSON response from your status_page view and then in success method of ajax, you can go to next URL:

window.location.href = '/url-where-you-want-to-redirect/';

I hope this helps.

Upvotes: 2

Related Questions