2011-09-02 31 views
6

Tôi đang tạo dự án django. Tuy nhiên, tôi đã gặp một trục trặc nhỏ. urls.py của tôi trông giống nhưDjango chuyển hướng đến thư mục gốc từ chế độ xem

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

views.py My này trong ứng dụng Trang chủ là như sau:

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

Bây giờ khi tôi đang đi đến trang đăng nhập, nó được mở ra như mong đợi. Sau khi tôi gửi biểu mẫu, tôi nhận được thông báo lỗi không thể tìm thấy url của mô-đun. Sau khi tìm hiểu một chút, tôi nhận thấy rằng chuyển hướng ("/") thực sự dịch thành http://localhost/login/ thay vì http://localhost/. Điều tương tự cũng xảy ra khi đăng xuất, tức là nó cố gắng mở url http://localhost/logout/ thay vì http://localhost/. Về cơ bản, khi trang được mở là http://localhost/login, thì redirect('/') thêm/vào cuối url hiện tại, và thì đấy - tôi nhận được url mà tôi không mong đợi - http://localhost/login/. Tôi không thể làm cho nó chuyển hướng đến thư mục gốc của trang web bằng cách sử dụng chuyển hướng.

Xin hãy giúp tôi ra với điều này và nếu có thể cũng giải thích nguyên nhân của hành vi vô lý này của Django

+1

Bạn đã thử HttpResponseRedirect? từ nhập khẩu django.http HttpResponseRedirect def logout (theo yêu cầu): \t trở HttpResponseRedirect ("/") –

+0

nơi là phần còn lại của urls.py của bạn? Quan điểm nào tương ứng với "/"? – jterrace

Trả lời

3

Nếu bạn nhìn vào documentation for redirect, có một số điều bạn có thể vượt qua các chức năng:

  • Một tên model
  • Một cái nhìn
  • URL

Nói chung, tôi nghĩ tốt hơn là chuyển hướng đến tên chế độ xem thay vì URL. Trong trường hợp của bạn, giả sử urls.py bạn có một mục mà trông giống như sau:

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

tôi thay vào đó sẽ sử dụng chuyển hướng như thế này:

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

jterrace là đúng, vì bạn đang sử dụng 'url()' bạn có thể 'tên' nó' url (r '^ $', 'Home.views.index', name = "home_index") 'và sử dụng nó trong khung nhìn như 'return HttpResponseRedirect (đảo ngược ('home_index'))' cũng sử dụng nó trong mẫu với 'home' – Pannu

Các vấn đề liên quan