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)