2012-08-02 9 views
5

Uważam, że request.is_ajax Django jest bardzo przydatnym sposobem dodawania progresywnego ulepszenia za pośrednictwem JS i nadal utrzymuje DRY w moich widokach.Korzystając z widoków opartych na klasach Django, w jaki sposób mogę zwrócić inny szablon, jeśli request.is_ajax

Jednak chcę używać widoków opartych na klasach i renderować z innym szablonem, jeśli request.is_ajax.

Nie jest dla mnie jasne, w jaki sposób mogę przesłonić moją domyślną "template_name" i uzależnić ładowanie szablonu od widoków opartych na klasach.

Jak mogę to zrobić?

+0

Może powinieneś dodać URL "api" dla widoku opartego na klasie, do którego odwołuje się wywołanie ajax z widokiem opartym na klasach tylko dla wywołań ajaxowych. – Jingo

+0

Pewnie, że mogę to zrobić, ale tego właśnie chcę uniknąć: nie daje mi to progresywnego ulepszania i daje mi więcej kodu widoku i adresu URL. – pwalsh

Odpowiedz

4

Odpowiedni sposób, aby to zrobić, to zastąpić metod przewidzianych przez TemplateResponseMixin.

Jeśli po prostu trzeba podać inny szablon dla żądań Ajax, należy zastąpić get_template_names. Jeśli chcesz podać inną odpowiedź, powiedz odpowiedź application/json, a następnie przesuń render_to_response, aby uzyskać inną HttpResponse dla żądań Ajax.

+0

dziękuję, to odpowiada na moje pytanie, i idzie dalej, aby wskazać mi w dobrym kierunku, aby przesłonić nie tylko szablon, ale obiekt odpowiedzi. – pwalsh

9

Zastąp get_template_names:

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

Dobra odpowiedź, dzięki. – pwalsh

Powiązane problemy