重定向到 django FormView 中的下一个 URL
Posted
技术标签:
【中文标题】重定向到 django FormView 中的下一个 URL【英文标题】:Redirect to next URL in django FormView 【发布时间】:2015-01-15 07:16:21 【问题描述】:我正在使用 Django 1.7
和 Python 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?