从文档中得到了这个:
class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
但是在我的loginView(FormView)
我无法找到接收和使用" redirect_to"的方法。在form_valid()
方法中使用var将用户发送回原始部分。
实际上我可以使用get()
方法接收它,但我认为我需要form_valid()
拜托,我怎么能实现这个目标?
答案 0 :(得分:0)
您可以从redirect_to
检索request.GET
,因此在您的CBV方法中,您可以使用self.request.GET.get('redirect_to')
。
请注意重定向到从查询字符串获取的网址可能不安全。例如,它可以链接到不同的域。 Django有一个方法is_safe_url
,用于在登录或注销时检查下一个URL。
答案 1 :(得分:0)
我删除了get
方法并添加了get_context_data
代替:
def get_context_data(self, **kwargs):
context = super(Login_vw, self).get_context_data(**kwargs)
context['next'] = self.request.GET.get('redirect_to')
return context
然后在我的tamplate表单中添加了这个:
<input type="hidden" name="next" value="{{ next }}" />
然后在form_valid
方法中检索“next
”变量,如下所示:
next = self.request.POST.get('next')
就是这样,在一个简短的解释中,get_context_data
收到下一个网址,将其发送到模板表单,然后模板表单将其发送回form_valid
方法