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

Posted

技术标签:

【中文标题】重定向到 django FormView 中的下一个 URL【英文标题】:Redirect to next URL in django FormView 【发布时间】:2015-01-15 07:16:21 【问题描述】:

我正在使用 Django 1.7Python 3.4。我有一个场景,我希望用户在登录后被重定向到另一个视图,如next GET 参数中定义的那样。但是在我目前的设置下,它们总是被重定向到主页。我希望在FormView 类的get_success_url 中有一种方法可以做到这一点。

下面是我的代码

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

通过上述设置,如果已定义,我如何重定向到除主页之外的下一个 URL?

【问题讨论】:

Django success url using kwargs 的可能重复项 我查看了上面提到的链接,虽然它处理重定向到另一个对象/视图,但它没有显示如何在 get_success_url 方法中获取 GET 参数以便传入next URL。 【参考方案1】:

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

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

希望这对你有用。

【讨论】:

你看到你在 self.request.POST 中获得下一个。因为这对我有用。你应该检查你的下一个参数是 POST 还是 GET。 试试 self.request.GET('next', None)。

以上是关于重定向到 django FormView 中的下一个 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中,如何在提交 CreateView 时重定向到 UpdateView?

django重定向导致重定向到下一页,但然后返回原始?

是否可以在 Django 中重定向到没有 AJAX 的条带结帐页面?

Django:登录页面中的下一个值发生了奇怪的变化

无需重定向的 Django 远程身份验证

使用 facebook 登录网站后重定向页面