2011-10-25 39 views
9

Tôi có một bản đồ url trông như thế này:Tôi có thể chuyển hướng đến một url khác trong một TemplateView django không?

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

Chỉ có một vài giá trị mà tôi chấp nhận cho nhóm chụp lang, đó là: (1) ro và (2) en. Nếu người dùng nhập http://server/app/fr/, tôi muốn chuyển hướng nó đến mặc định http://server/app/en/.

Tôi làm cách nào để thực hiện điều này vì MyTemplateView chỉ có phương thức được mong đợi trả về từ điển?

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

Trả lời

11

Tại sao chỉ get_context_data?

Chỉ cần thiết lập trình xử lý get để thực hiện chuyển hướng nếu cần.

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

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

Tôi biết câu hỏi này cũ, nhưng tôi đã tự làm điều này. Một lý do bạn có thể nghĩ rằng bạn muốn làm điều đó trong get_context_data là do logic kinh doanh, nhưng bạn nên đặt nó trong dispatch.

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

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

Giữ logic nghiệp vụ của bạn ở dispatch và bạn sẽ có màu vàng.

Các vấn đề liên quan