5

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

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

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

我怎样才能做到这一点?

4

2 回答 2

11

覆盖get_template_names

def get_template_names(self):
    if self.request.is_ajax():
        return ['ajax_template.html']
    else:
        return ['standard_template.html']
于 2012-08-02T17:06:26.730 回答
4

执行此操作的适当方法是覆盖TemplateResponseMixin.

如果您只需要为 Ajax 请求提供不同的模板,请覆盖get_template_names. 如果您想完全提供不同的响应,比如说一个application/json响应,然后覆盖render_to_response以产生不同HttpResponse的 Ajax 请求。

于 2012-08-02T17:06:42.560 回答