2012-08-02 20 views
5

Tôi tìm request.is_ajax của Django là một cách rất hữu ích để thêm tăng cường tiến bộ qua JS và vẫn giữ DRY theo quan điểm của tôi.Sử dụng chế độ xem dựa trên lớp Django, làm cách nào tôi có thể trả lại mẫu khác nếu request.is_ajax

Tuy nhiên, tôi muốn sử dụng chế độ xem dựa trên lớp và hiển thị với mẫu khác nếu request.is_ajax.

Tôi không thể ghi đè lên "template_name" mặc định của mình và làm cho mẫu tải có điều kiện trong chế độ xem dựa trên lớp học.

Tôi làm cách nào để thực hiện việc này?

+0

Có thể bạn nên thêm url "api" cho chế độ xem dựa trên lớp của bạn, nơi cuộc gọi ajax đi tới chế độ xem dựa trên lớp chỉ dành cho các cuộc gọi ajax. – Jingo

+0

Chắc chắn tôi có thể làm điều đó, nhưng đó là những gì tôi muốn tránh: nó không cho tôi tăng cường tiến bộ, và nó mang lại cho tôi xem nhiều hơn và mã url. – pwalsh

Trả lời

4

Cách thích hợp để làm điều này là để ghi đè lên các phương pháp được cung cấp bởi các TemplateResponseMixin.

Nếu bạn chỉ cần cung cấp một mẫu khác cho các yêu cầu Ajax, sau đó ghi đè get_template_names. Nếu bạn muốn cung cấp một phản hồi hoàn toàn khác nhau, hãy nói câu trả lời application/json, sau đó ghi đè render_to_response để tạo một yêu cầu Ajax khác nhau HttpResponse.

+0

cảm ơn, điều này trả lời câu hỏi của tôi và đi xa hơn để chỉ cho tôi đúng hướng để ghi đè không chỉ mẫu mà là đối tượng phản hồi. – pwalsh

9

Override get_template_names:

def get_template_names(self): 
    if self.request.is_ajax(): 
     return ['ajax_template.html'] 
    else: 
     return ['standard_template.html'] 
+0

câu trả lời hay, cảm ơn. – pwalsh

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