2011-09-02 23 views
6

Bir django projesi oluşturuyorum. Ancak, küçük bir hıçkırıkla karşılaştım.Django, bir görünümden köke yönlendirme

def login(request,nextLoc): 
    if request.method == "POST": 
     form = AuthenticationForm(request.POST) 
     user=auth.authenticate(username=request.POST['username'],password=request.POST['password']) 
     if user is not None: 
      if user.is_active: 
       auth.login(request, user) 
       return redirect(nextLoc) 
      else: 
       error='This account has been disabled by the administrator. Contact the administrator for enabling the said account' 
     else: 
      error='The username/password pair is incorrect. Check your credentials and try again.' 

    else: 
     if request.user.is_authenticated(): 
      return redirect("/profile/") 
     form = AuthenticationForm() 
     error='' 
    return render_to_response('login.html',{'FORM':form,'ERROR':error},context_instance=RequestContext(request)) 

def logout(request): 
    auth.logout(request) 
    return redirect('/') 

Şimdi beklendiği gibi ben bu açılıyor giriş sayfasına gidiyorum zaman: Ev uygulamasında bu

url(r'^login/(?P<nextLoc>)$', 'Home.views.login'), 
url(r'^logout/$', 'Home.views.logout'), 

Benim views.py aşağıdaki gibidir gibi My urls.py görünüyor. Formu gönderdikten sonra, modül URL'lerini bulamadığını belirten bir hata alıyorum. Biraz etrafta kazandıktan sonra, yönlendirme ("/") aslında http://localhost/ yerine http://localhost/login/'a dönüştüğünü fark ettim. Aynı durum çıkışta olur, yani http://localhost/ yerine http://localhost/logout/ URL'sini açmaya çalışır. Temel olarak, sayfa açıldığında, redirect('/'), redirect('/'), geçerli URL'nin sonuna ekler ve voila - Beklemediğim bir URL alıyorum - http://localhost/login/. Yönlendirmeyi kullanarak sitenin köküne yönlendirme yapamıyorum.

bana bu konuda yardım ve mümkünse de Django bu mantıksız davranışlarının nedenini açıklayınız

Eğer documentation for redirect bakarsak
+1

denediniz mi? django.http ithalattan HttpResponseRedirect def çıkış (istek): \t dönüş HttpResponseRedirect ("/") sizin urls.py gerisi nerede –

+0

? Hangi görünüm "/" ile aynı mı? – jterrace

cevap

3

, işleve geçebilir birkaç şey vardır:

  • bir model
  • bir görünüm adı
  • URL

Genel olarak, bir URL yerine bir görünüm adına yönlendirmenin daha iyi olduğunu düşünüyorum. senin durumda, urls.py varsayarak şöyle bir giriş içerir:

url(r'^$', 'Home.views.index'), 

yerine böyle yönlendirme kullanır: Eğer HttpResponseRedirect

redirect('Home.views.index') 
+2

jterrace haklı, 'url()' yi kullandığınız için '' '' '' '' '' 'url (r '^ $', 'Home.views.index', name =" home_index ")' dır ve görünümünde kullanabilirsiniz 'HttpResponseRedirect (geri (' home_index ')) 'döndürdüğünde' 'home' ile de şablonda kullanabilirsiniz – Pannu

İlgili konular