2011-10-25 12 views
9

Mam mapowanie adresu URL, który wygląda tak:Czy mogę przekierować do innego adresu URL w django TemplateView?

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

Istnieje tylko kilka wartości, że przyjmuję do grupy przechwytywania lang, to jest: (1) ro oraz (2) en. Jeśli użytkownik wpisze http://server/app/fr/, chcę przekierować go do domyślnego http://server/app/en/.

Jak mogę to zrobić, ponieważ MyTemplateView ma tylko metodę, która ma zwrócić słownik?

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

Odpowiedz

11

Dlaczego tylko get_context_data?

Po prostu skonfiguruj program obsługi get, aby wykonać przekierowanie w razie potrzeby.

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

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

Wiem, że to pytanie jest stare, ale sam to zrobiłem. Przyczyna, dla której możesz pomyśleć, że chcesz to zrobić w get_context_data, wynika z logiki biznesowej, ale powinieneś umieścić ją w dispatch.

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

    return super(MyTemplateView, self).dispatch(request, *args, **kwargs) 

Miej logikę biznesową w dispatch i powinien być złoty.

Powiązane problemy