Can I redirect to another url in a django TemplateView?

后端 未结 4 2075
盖世英雄少女心
盖世英雄少女心 2021-02-02 09:13

I have a url mapping that looks like this:

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

There are only a few values that

相关标签:
4条回答
  • 2021-02-02 09:44

    I know this question is old, but I've just done this myself. A reason you may think you want to do it in get_context_data is due to business logic, but you should place it in dispatch.

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

    Keep your business logic in your dispatch and you should be golden.

    0 讨论(0)
  • 2021-02-02 09:45

    A note from the future: it's now possible and probably simpler just to use RedirectView.

    0 讨论(0)
  • 2021-02-02 09:46

    This worked for me using an UpdateView class in Django 3.1:

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

    To determine this, I analyzed its base class (Cmd+Click in PyCharm), where I found the base method:

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

    You can find this and other methods in the Django source code: django/views/generic/edit.py

    0 讨论(0)
  • 2021-02-02 09:59

    Why only get_context_data?

    Just set up your get handler to do a redirect if necessary.

    def get(self, request, lang):
        if lang == 'fr':
             return http.HttpResponseRedirect('../en')
    
         return super(MyTemplateView, self).get(request, lang)
    
    0 讨论(0)
提交回复
热议问题