我正在使用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?
答案 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
希望这对你有用。