2012-08-02 20 views
5

我發現Django的request.is_ajax通過JS增加逐步增強,並且仍然保持乾燥我的意見非常有用的方式不同的模板。使用Django基於類的意見,我怎樣才能返回,如果request.is_ajax

不過,我想使用基於類的視圖和渲染,如果request.is_ajax不同的模板。

這是我不清楚我怎麼可以重寫我的默認「TEMPLATE_NAME」,使模板加載基於類的視圖條件。

我怎樣才能做到這一點?

+0

也許你應該爲你的基於類的視圖添加一個「api」url,其中ajax調用只能用於ajax調用的基於類的視圖。 – Jingo 2012-08-02 16:42:03

+0

當然,我可以做到這一點,但這是我想避免的:它不會給我漸進的增強,它給了我更多的視圖和url代碼。 – pwalsh 2012-08-02 16:43:55

回答

4

適當的方式做,這是覆蓋在TemplateResponseMixin提供的方法。

如果您只需要提供Ajax請求不同的模板,然後覆蓋get_template_names。如果您想完全提供不同的響應,請說出application/json響應,然後覆蓋render_to_response以針對Ajax請求產生不同的HttpResponse

+0

謝謝,這回答了我的問題,並進一步指出我正確的方向,不僅覆蓋模板而且覆蓋響應對象。 – pwalsh 2012-08-02 17:17:36

9

覆蓋get_template_names

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

很好的答案,謝謝。 – pwalsh 2012-08-02 17:17:55