【问题标题】:Can I redirect to another url in a django TemplateView?我可以重定向到 django TemplateView 中的另一个网址吗?
【发布时间】:2011-12-14 15:31:54
【问题描述】:

我有一个如下所示的 url 映射:

url(r'^(?P<lang>[a-z][a-z])/$', MyTemplateView.as_view()),

对于lang 捕获组,我只接受几个值,即:(1) ro 和 (2) en。如果用户键入http://server/app/fr/,我想将其重定向到默认的http://server/app/en/

由于MyTemplateView 只有一个预期返回字典的方法,我该怎么做?

def get_context_data(self, **kwargs):
    return { 'foo': 'blah' }

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    为什么只有get_context_data

    只需设置您的 get 处理程序以在必要时进行重定向。

    def get(self, request, lang):
        if lang == 'fr':
             return http.HttpResponseRedirect('../en')
    
         return super(MyTemplateView, self).get(request, lang)
    

    【讨论】:

      【解决方案2】:

      我知道这个问题很老了,但我自己刚刚完成了这个。您可能认为要在 get_context_data 中执行此操作的原因是由于业务逻辑,但您应该将其放在 dispatch 中。

      def dispatch(self, request, *args, **kwargs):
          if not request.user.is_authenticated():
              return redirect('home')
      
          return super(MyTemplateView, self).dispatch(request, *args, **kwargs)
      

      将您的业务逻辑保存在您的 dispatch 中,您应该是金子。

      【讨论】:

        【解决方案3】:

        来自未来的说明:现在可以使用RedirectView,而且可能更简单。

        【讨论】:

          【解决方案4】:

          这对我在 Django 3.1 中使用 UpdateView 类很有用:

          def get(self, request, *args, **kwargs):
             
              if 1 == 1:
                  return HttpResponseRedirect(reverse_lazy("view_name_here"))
              else:
                  return super().get(request, *args, **kwargs)
          

          为了确定这一点,我分析了它的基类(PyCharm 中的 Cmd+Click),在那里我找到了基方法:

          def get(self, request, *args, **kwargs):
              self.object = self.get_object()
              return super().get(request, *args, **kwargs)
          

          你可以在 Django 源代码中找到这个和其他方法:django/views/generic/edit.py

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-03-31
            • 1970-01-01
            • 2020-09-29
            • 2016-11-05
            • 2014-07-14
            • 1970-01-01
            • 2021-04-05
            相关资源
            最近更新 更多