2017-11-30 9 views
0

Ich habe ein Problem über Django URL-Umleitung. Die Struktur des Codes ist folgende:Umleitung funktioniert nicht django

  • Die Reaktoransicht zeigt eine HTML-Seite mit einer Liste von Elementen. Wenn Sie auf einen von ihnen klicken, wird eine Ajax-Anfrage an die Ansicht gestellt.
  • Die Ajax-Anforderung ruft eine andere Ansicht mit den notwendigen Informationen auf
  • Der measurementReactor wird aufgerufen und zeigt Details über einen Reaktor an.

Alle Funktionen werden korrekt aufgerufen wird die GET-Anforderung gemacht, aber die Seite umleiten nicht in Browser ...

enter image description here

urls.py

urlpatterns = [ 
    url(r'^reactors/$', views.reactors, name = 'reactors'), 
    url(r'^measurements/reactor/$', views.measurementReactor, name='measureReact'), 
] 

Ansichten. py

@login_required 
def reactor(request): 
if request.method == "POST" and request.is_ajax(): 
    if request.POST.get('type') == "measurement" : 
     return redirect('/measurements/reactor/?ref='+request.POST.get('id')) 

@login_required 
def measurementReactor(request): 
    reactobj = reactor.objects.get(id=request.GET['ref']) 
    query = measurements.objects.filter(id_reactor=reactobj.id) 

    return render(request, "measureReact.html",{"query":query}) 

reaktor.js

var table1 = $('#datatable').DataTable(); 

$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function() { 
var data = $(this).parent().find("[name=pk]").text(); 
$.ajax({ 
    type : "POST", 
    data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"}, 
}); 
}); 

[EDIT] Vielen Dank für Ihre Antworten, ich tat dies und es funktioniert!

#views.py 
import json 
@login_required 
def reactors(request): 
    if request.POST.get('type') == "measurement" : 
     data = json.dumps({'url':'/measurements/reactor/?ref='+request.POST.get('id')}) 
     return HttpResponse(data) 

#reactor.js 
$.ajax({ 
     type : "POST", 
     data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"}, 
     dataType: 'json', 
     success: function(data){ 
     window.location.href = data["url"]; 
     } 
    }); 

Antwort

1

In Ajax-Aufruf Sie werden die Daten im JSON-Format bekommen, wird es nicht die URL ändern, besser die URL auf Json zurückgeben Fromt Httpresponse verwenden und diese URL aus dem JavaScript-Code umleiten.

@login_required 
def reactor(request): 
if request.method == "POST" and request.is_ajax(): 
    import josn 
    if request.POST.get('type') == "measurement" : 
     data = josn.dump({'url':/measurements/reactor/?ref='+request.POST.get('id')}) 
     return HttpResponse(data) 

in der Ajax-Aufruf Erfolg Methode, die Antwort fangen und umleiten mit $ Fenster

0

Als Aman kumar vorgeschlagen, sollten Sie Ihre Reaktor Ansicht zurückkehren url zurück zu reactor.js und dann umleiten verwenden auf die gewünschte Seite:

reactor.js

var table1 = $('#datatable').DataTable(); 

$('#datatable tbody').on('click', 'tr>th:not(.controls.mdl-data-table__cell--non-numeric)', function() { 
var data = $(this).parent().find("[name=pk]").text(); 
$.ajax({ 
    type : "POST", 
    data : {'csrfmiddlewaretoken' : csrftoken, 'id':data, 'type':"measurement"}, 
    success: function(data){ 
    window.location.href = data.url; 
    } 
}); 
});