2014-11-18 15 views
5

Tôi đang sử dụng Django 1.7 với Python 3.4. Tôi có một kịch bản mà tôi muốn người dùng được chuyển hướng đến chế độ xem khác, như được xác định trong tham số GET next sau khi họ đăng nhập. Nhưng với thiết lập hiện tại của tôi, chúng luôn được chuyển hướng đến trang chủ. Tôi đã hy vọng có một cách để làm điều này trong các get_success_url của lớp FormView.Chuyển hướng đến URL tiếp theo trong django FormView

Dưới đây là mã của tôi

Tham số tiếp theo trong URL

http://localhost:8000/login/?next=/ads/new 

views.py

from django.views.generic.edit import FormView 

class LoginView(FormView): 

    template_name = 'users/login.html' 
    form_class = LoginForm 

    def get_success_url(self):       
     return reverse('home') 

    def form_valid(self, form): 
     form.user.backend = 'django.contrib.auth.backends.ModelBackend' 
     login(self.request, form.user) 
     messages.info(self.request, 'Login successful') 
     return super(LoginView, self).form_valid(form) 

urls.py

url(r'^login/', LoginView.as_view(), name='login'), 
url(r'^new$', 'apps.adverts.views.add_new_advert', name='new_advert'), # URL to use after login, in next param 

Với thiết lập ở trên, làm cách nào để chuyển hướng đến URL tiếp theo nếu nó được xác định, ngoài trang chủ?

+0

có thể trùng lặp [url thành công Django sử dụng kwargs] (http://stackoverflow.com/questions/26897050/django-success-url-using-kwargs) – rnevius

+0

Tôi đã xem liên kết được đề cập ở trên và trong khi đề cập đến việc chuyển hướng đến một đối tượng/khung nhìn khác, nó không hiển thị cách nhận các tham số 'GET' trong phương thức' get_success_url' để chuyển vào URL 'next'. – Frankline

Trả lời

7

Bao gồm dữ liệu dưới dạng tham số GET trong url thành công của bạn.

def get_success_url(self): 
    # find your next url here 
    next_url = self.request.POST.get('next',None) # here method should be GET or POST. 
    if next_url: 
     return "%s" % (next_url) # you can include some query strings as well 
    else : 
     return reverse('home') # what url you wish to return 

Hy vọng điều này sẽ phù hợp với bạn.

+0

Điều này không hiệu quả đối với tôi. Không chắc chắn mã của tôi bị thiếu. – Frankline

+2

bạn có thấy bạn tiếp theo trong self.request.POST không. Vì điều này đang làm việc cho tôi. bạn nên kiểm tra là tham số tiếp theo của bạn đến trên POST hoặc GET. –

+0

Hãy thử self.request.GET ('next', None). – tzipp

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