2011-10-25 25 views
9

que tienen una asignación de dirección URL que tiene este aspecto:¿Puedo redirigir a otra URL en un django TemplateView?

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

Hay sólo unos pocos valores que acepto para el grupo de captura de lang, es decir: (1) ro y (2) en. Si el usuario escribe http://server/app/fr/, quiero redirigirlo al valor predeterminado http://server/app/en/.

¿Cómo puedo hacer esto ya que MyTemplateView solo tiene un método que se espera que devuelva un diccionario?

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

Respuesta

11

¿Por qué solo get_context_data?

Simplemente configure su controlador get para hacer una redirección si es necesario.

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

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

Sé que esta pregunta es antigua, pero acabo de hacer esto yo mismo. Una razón por la que puede pensar que quiere hacerlo en get_context_data es debido a la lógica comercial, pero debe ubicarla en dispatch.

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

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

Mantenga su lógica de negocio en su dispatch y usted debe ser de oro.

Cuestiones relacionadas