2012-08-02 7 views
5

Trovo che la richiesta di Django.is_ajax sia un modo molto utile per aggiungere il miglioramento progressivo tramite JS e mantenere comunque DRY nelle mie visualizzazioni.Utilizzando le viste basate su classi Django, come posso restituire un modello diverso se request.is_ajax

Tuttavia, desidero utilizzare le visualizzazioni basate su classi e il rendering con un modello diverso se request.is_ajax.

Non mi è chiaro come sia possibile ignorare il mio nome_modello predefinito e rendere il caricamento del modello condizionale nelle viste basate su classi.

Come posso fare questo?

+0

Forse dovresti aggiungere un URL "api" per la tua vista basata sulla classe dove la chiamata ajax va con una vista basata sulla classe solo per le chiamate Ajax. – Jingo

+0

Certo che posso farlo, ma è quello che voglio evitare: non mi dà miglioramenti progressivi, e mi dà più vista e codice url. – pwalsh

risposta

4

Il modo appropriato per farlo è quello di sostituire i metodi forniti dalla TemplateResponseMixin.

Se è semplicemente necessario fornire un modello diverso per le richieste Ajax, quindi eseguire l'override di get_template_names. Se si desidera fornire una risposta diversa, pronunciare una risposta application/json, quindi ignorare render_to_response per produrre uno HttpResponse diverso per le richieste Ajax.

+0

grazie, questo risponde alla mia domanda, e va oltre a indicarmi la giusta direzione per ignorare non solo il modello ma l'oggetto risposta. – 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

buona risposta, grazie. – pwalsh