2014-04-16 7 views
5

Ich versuche, einige Informationen zu meiner Indexseite (index.html) von views.py. Eine wurde übergeben, ich muss auf der Indexseite darauf zugreifen. Ich habe es versucht, es zu googeln, aber es war mir nicht klar. Jede Hilfe wäre willkommen. Ich habe unten angehängt, was ich versucht habe.Pass Argumente mit der HttpResponseRedirect in Django

Unten möchte ich den Wert "bar" auf der Indexseite zugreifen. Wie kann ich das machen ?

def tempLogin(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return HttpResponseRedirect(reverse('index',foo='bar')) 
     else: 
      return HttpResponseRedirect(reverse('index')) 
    else: 
     return HttpResponseRedirect(reverse('index')) 

Antwort

4

Sie können dies nicht tun HttpResponse oder HttpResponseRedirect verwenden. Sie müssten render oder render_to_response verwenden. Etwas wie unten:

from django.shortcuts import render 

def templogin(request): 
    # Do all your processings here ... 
    return render(request, 'index.html', {'bar': bar}) 

Das erste zu render gebene Argument ist immer request. Zweites Argument ist der Name der Vorlage. In Ihrem Fall ist es index.html. Und das dritte Argument ist ein Verzeichnis , d. H. die Variablen, die dem Vorlagenkontext hinzugefügt werden sollen. In Ihrem Fall ist es bar.

Hier ist mehr über render auf Django docs.

Und dann in der Vorlage, können Sie die bar Variable etwas wie unten Zugang:

<h1> {{ bar }} </h1> 

oder

<span> Hello, {{ bar }}! </span> 

Django ersetzen wird automatisch {{ bar }} mit seinem Wert.

11

Ich sehe diese Frage ziemlich viel, und es verrät ein Mangel an Verständnis dafür, was HttpResponseRedirect tut. Alles, was es tut, ist, dem Browser mitzuteilen, dass er eine andere URL abrufen soll. Die einzigen Parameter, die Sie übergeben können, sind die, die von diesem anderen URL-Muster erwartet werden. Wenn Ihre Index-URL einen optionalen Platz für einen Namen hat, können Sie ihn übergeben. Andernfalls müssen Sie es auf andere Weise tun: vielleicht in der Sitzung.