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

5 django django-forms django-views

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

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

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

我怎样才能做到这一点?

Chr*_*att 9

覆盖get_template_names:

def get_template_names(self):
    if self.request.is_ajax():
        return ['ajax_template.html']
    else:
        return ['standard_template.html']
Run Code Online (Sandbox Code Playgroud)


Fil*_*vić 4

执行此操作的适当方法是重写TemplateResponseMixin.

如果您只需要为 Ajax 请求提供不同的模板,则覆盖get_template_names. 如果您想完全提供不同的响应(例如响应application/json),然后覆盖render_to_response以生成不同的HttpResponseAjax 请求。