2016-06-04 9 views
0

In einer Definition meiner Ansicht Ich mache diesenHttpResponseRedirect mit umgekehrten nicht Gabe von Parametern

return HttpResponseRedirect(reverse('home'),{"fail":"true"}) 

dann die Zieldefinition in einer Ansicht Empfang tut dies

def Validate(request): 
    rslt = request.GET.get("fail", "False") #--->fail is always false 
    .... 
    .... 

In dem über dem Variable scheitern, immer false. Irgendwelche Vorschläge, warum ich immer ein falsches bekomme. Warum wird mein neuer Parameter nicht übergeben?

+0

Warum ist das so nahe? Vermisse ich ein Detail? – Rajeshwar

Antwort

0

Es ist, weil Sie für fail von GET fragen, aber Sie nichts in GET übergeben.

Sie brauchen:

return HttpResponseRedirect('%s?fail=%s' % (reverse('home'), True)) 

dann können Sie es mögen fangen:

request.GET.get("fail", False) 

Missbrauch Boolesche Werte nicht! ;)

+0

warte ich bin verwirrt. Übertrage ich in meiner ersten Aussage nicht {"fail": "true"}? Ich hatte den Eindruck, dass das Übergeben von Parametern wie "home? Key = Val" dasselbe ist wie das Umleiten von HttpResponseRedirect ("home", {"key": "val"})? – Rajeshwar

+0

Wenn "fail" nicht in get ist, wird dies eine bool sein, andernfalls eine Zeichenfolge. Sie sollten einige 'cast/eval' Logik – schwobaseggl

+0

@Rajeshwar nicht als GET hinzufügen. Es ist sogar falsch für Positionsargumente. Es sollte 'reverse ('home', kwarts = {" fail ": True})' – doniyor

1

Die args und kwargs zum HttpResponseRedirect Konstruktor übergeben

def __init__(self, redirect_to, *args, **kwargs): 
    ... 

sind eine QueryDict (GET- oder POST-konstruieren nicht verwendet wird). Sie initialisieren hier eine Antwort, keine Anfrage. Wie Doniyor bereits festgestellt hat, müssen Sie im Grunde auf den Weg durch reverse() zurück die Abfragezeichenfolgeflag manuell anhängen:

return HttpResponseRedirect('{to}?{query}'.format(
    to=reverse('home'), 
    query=urllib.urlencode({"fail":"true"}) 
)) 

Das hat nichts mit django zu tun hat, aber allgemeine HTTP-Umleitung. Sie können eine Anforderung nur an einen Speicherort umleiten (zu dem Sie eine Abfragezeichenfolge hinzufügen können), aber Sie können die Anforderung selbst nicht manipulieren, z. B. das Hinzufügen von POST-Daten oder das Setzen von Headern.

+0

Danke für die tolle Erklärung. Das klärt viel auf – Rajeshwar

0

Sie müssen einen zweiten Parameter bei Umkehrfunktion geben ... als de Argumente ... das funktioniert gut für mich !!!

return reverse('home', args='true') 
Verwandte Themen