Fra*_*ine 6 django redirect django-forms django-class-based-views
我使用Django 1.7带Python 3.4.我有一个场景,我希望用户next在登录后重定向到GET参数中定义的另一个视图.但是根据我目前的设置,他们总是被重定向到主页.我希望有一种方法可以get_success_url在FormView课堂上做到这一点.
以下是我的代码
URL中的下一个参数
http://localhost:8000/login/?next=/ads/new
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
通过上面的设置,如果定义了下一个URL,除主页外,如何重定向到下一个URL?
将数据作为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
Run Code Online (Sandbox Code Playgroud)
希望这对你有用.
| 归档时间: |
|
| 查看次数: |
5046 次 |
| 最近记录: |