2011-10-25 60 views
9

我有一個URL映射,看起來像這樣:我可以重定向到django TemplateView中的另一個網址嗎?

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' } 

回答

11

爲什麼只有get_context_data

只需設置您的get處理程序即可在必要時執行重定向。

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

    return super(MyTemplateView, self).get(request, lang) 
23

我知道這個問題很老,但我自己也是這麼做的。您可能認爲您想要在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,你應該是金色的。

相關問題