使用基于Django类的视图,如果request.is_ajax,我如何返回不同的模板

时间:2012-08-02 16:39:51

标签: django django-forms django-views

我发现Django的request.is_ajax是一种非常有用的方法,可以通过JS添加渐进增强功能,并且仍然可以在我的视图中保留DRY。

但是,如果是request.is_ajax,我想使用基于类的视图并使用不同的模板进行渲染。

我不清楚如何覆盖默认的“template_name”并使模板在基于类的视图中加载条件。

我该怎么做?

2 个答案:

答案 0 :(得分:9)

覆盖get_template_names

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