【问题标题】:Django redirect from inside a viewDjango 从视图内部重定向
【发布时间】:2018-05-20 03:32:00
【问题描述】:

我使用的是 django 1.11.8。

我需要对请求的视图执行一些检查,并在其中将用户重定向到另一个 Http 页面,但是此代码失败,因为重定向被忽略了。

我错过了什么?

class ThisCreateView(CreateView):

    def get_form_kwargs(self):
         if self.kwargs['x'] == 1:
              return redirect(reverse('this_app:this_list'))
         return kwargs

【问题讨论】:

    标签: python django redirect django-views


    【解决方案1】:

    您不能从 get_form_kwargs 方法返回重定向。它的工作是为表单返回一个 kwargs 字典。

    您可以将此检查移至dispatch 方法。

    def dispatch(self, request, *args, **kwargs):
         if kwargs['x'] == 1:
              # note you don't need to call reverse when you use redirect
              return redirect('this_app:this_list')
         return super(ThisCreateView, self).dispatch(*args, **kwargs)
    

    【讨论】:

    • 或者你可以放弃基于类的视图并使用简单的函数视图,这使得执行流程更容易阅读和理解(必要时可以更改)。
    【解决方案2】:

    @Alasdair 的解决方案对我来说非常有效,尽管有一点小改动:

    return super(ThisCreateView, self).dispatch(request, *args, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 2015-11-01
      • 2011-11-09
      • 2021-05-26
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多