我发现Django的request.is_ajax是一种非常有用的方法,可以通过JS添加渐进增强功能,并且仍然可以在我的视图中保留DRY。
但是,如果是request.is_ajax,我想使用基于类的视图并使用不同的模板进行渲染。
我不清楚如何覆盖默认的“template_name”并使模板在基于类的视图中加载条件。
我该怎么做?
答案 0 :(得分:9)
def get_template_names(self):
if self.request.is_ajax():
return ['ajax_template.html']
else:
return ['standard_template.html']
答案 1 :(得分:4)
执行此操作的适当方法是覆盖TemplateResponseMixin
提供的方法。
如果您只需要为Ajax请求提供不同的模板,请覆盖get_template_names
。如果您想完全提供不同的响应,请说出application/json
响应,然后重写render_to_response
以针对Ajax请求生成不同的HttpResponse
。