Django

2014-04-16 18 views
5

'da HttpResponseRedirect'i kullanarak bağımsız değişkenleri geçirme İndeks sayfama (index.html) bazı bilgileri views.py'den aktarmaya çalışıyorum. Biri geçti, dizin sayfasına girmem gerekiyor. Onu denedim, ama bana açık değildi. Herhangi bir yardım takdir edilecektir. Denediğim şeyi aşağıda ekledim.Django

Aşağıda dizin sayfasındaki "bar" değerine erişmek istiyorum. Bunu nasıl yapabilirim ?

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

cevap

4

Sen HttpResponse veya HttpResponseRedirect kullanarak bunu yapamaz. render veya render_to_response kullanmanız gerekir. Biraz aşağıda gibi:

from django.shortcuts import render 

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

render geçirilen birinci parametre request olduğunu. İkinci argüman, şablonun adıdır. Sizin durumunuzda, index.html. Ve üçüncü argüman, şablon bağlamına eklenecek değişkenler olan bir i.e sözlüktir. Durumunuzda bar.

Django docs'da render hakkında daha fazla bilgi.

Ve sonra şablonunda, sen biraz aşağıda bar değişkeni erişebilir: Bu değer ile

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

veya

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

Django

otomatik {{ bar }} yerini alacak.

11

Bu soruyu çok fazla görüyorum ve HttpResponseRedirect'in ne yaptığı konusunda bir anlayış eksikliği olduğunu anladım. Tek yapmanız gereken, tarayıcının başka bir URL'ye gitmesini ve getirmesini söylemektir: böylece, ona aktarabileceğiniz tek parametreler, diğer URL kalıbı tarafından beklenenler olacaktır. Dizin URL’nizin bir isim değeri koymanız için isteğe bağlı bir alanı varsa, bunu iletebilirsiniz. Aksi takdirde, bunu başka bir yolla yapmanız gerekir: belki de oturumda.