2012-08-02 22 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