我可以重定向到django TemplateView中的另一个URL吗?

can*_*dry 20 django django-views

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

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

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

我怎么能这样做,因为MyTemplateView只有一个方法可以返回字典?

def get_context_data(self, **kwargs):
    return { 'foo': 'blah' }
Run Code Online (Sandbox Code Playgroud)

小智 37

我知道这个问题已经过时了,但我自己就是这么做的.您可能认为要进行此操作的原因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)
Run Code Online (Sandbox Code Playgroud)

保持你的业务逻辑dispatch,你应该是金.


Yuj*_*ita 12

为什么只有get_context_data

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

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

     return super(MyTemplateView, self).get(request, lang)
Run Code Online (Sandbox Code Playgroud)