2014-04-16 14 views
5

Sto cercando di passare alcune informazioni alla mia pagina indice (index.html) da views.py. Uno passato, ho bisogno di accedervi nella pagina indice. Ho provato a cercarlo su google, ma non era chiaro per me. Qualsiasi aiuto sarebbe apprezzato. Ho allegato qui sotto quello che ho provato.Passare argomenti utilizzando HttpResponseRedirect in Django

Di seguito, desidero accedere al valore "bar" nella pagina dell'indice. Come lo posso fare ?

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')) 

risposta

4

Non puoi farlo utilizzando HttpResponse o HttpResponseRedirect. Dovresti usare render o render_to_response. Un po 'come di seguito:

from django.shortcuts import render 

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

Il primo argomento passato a render è sempre request. Il secondo argomento è il nome del modello. Nel tuo caso, è index.html. E il terzo argomento è un dizionario ie le variabili da aggiungere al contesto del modello. Nel tuo caso è bar.

Ulteriori informazioni su render su Django docs.

E poi nel modello, è possibile accedere alla variabile bar un po 'come di seguito:

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

o

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

Django sostituirà automaticamente {{ bar }} con il suo valore.

11

Vedo questa domanda molto, e tradisce una mancanza di comprensione di ciò che fa HttpResponseRedirect. Tutto ciò che fa è dire al browser di andare a prendere un altro URL: quindi gli unici parametri che puoi passare ad esso sono quelli che ci si aspetterebbe da quell'altro pattern URL. Se l'URL dell'indice ha uno spazio opzionale in cui inserire un valore nome, puoi passarlo. Altrimenti, dovrai farlo in un altro modo: forse nella sessione.