重定向到django FormView中的下一个URL

时间:2014-11-18 07:12:15

标签: django redirect django-forms django-class-based-views

我正在使用Django 1.7 Python 3.4。我有一个场景,我希望用户在登录后重定向到next GET参数中定义的另一个视图。但是根据我目前的设置,他们总是被重定向到主页。我希望有一种方法可以在get_success_url类的FormView中执行此操作。

以下是我的代码

网址中的下一个参数

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

通过上述设置,除主页外,如何定义下一个URL?

1 个答案:

答案 0 :(得分:9)

将数据作为GET参数包含在您的成功网址中。

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

希望这对你有用。