我发现Django的request.is_ajax通过JS增加逐步增强,并且仍然保持干燥我的意见非常有用的方式不同的模板。使用Django基于类的意见,我怎样才能返回,如果request.is_ajax
不过,我想使用基于类的视图和渲染,如果request.is_ajax不同的模板。
这是我不清楚我怎么可以重写我的默认“TEMPLATE_NAME”,使模板加载基于类的视图条件。
我怎样才能做到这一点?
我发现Django的request.is_ajax通过JS增加逐步增强,并且仍然保持干燥我的意见非常有用的方式不同的模板。使用Django基于类的意见,我怎样才能返回,如果request.is_ajax
不过,我想使用基于类的视图和渲染,如果request.is_ajax不同的模板。
这是我不清楚我怎么可以重写我的默认“TEMPLATE_NAME”,使模板加载基于类的视图条件。
我怎样才能做到这一点?
适当的方式做,这是覆盖在TemplateResponseMixin
提供的方法。
如果您只需要提供Ajax请求不同的模板,然后覆盖get_template_names
。如果您想完全提供不同的响应,请说出application/json
响应,然后覆盖render_to_response
以针对Ajax请求产生不同的HttpResponse
。
谢谢,这回答了我的问题,并进一步指出我正确的方向,不仅覆盖模板而且覆盖响应对象。 – pwalsh 2012-08-02 17:17:36
def get_template_names(self):
if self.request.is_ajax():
return ['ajax_template.html']
else:
return ['standard_template.html']
很好的答案,谢谢。 – pwalsh 2012-08-02 17:17:55
也许你应该为你的基于类的视图添加一个“api”url,其中ajax调用只能用于ajax调用的基于类的视图。 – Jingo 2012-08-02 16:42:03
当然,我可以做到这一点,但这是我想避免的:它不会给我渐进的增强,它给了我更多的视图和url代码。 – pwalsh 2012-08-02 16:43:55