如何动态更改Django管理模板

时间:2013-05-14 09:25:18

标签: python django

我有像这样的Django Admin模型

class STUDENTAdmin(ModelAdmin):
    change_list_template = "students/student_change_list.html"

现在我想根据一些请求参数动态更新它

之类的东西
if request.GET['foo']:
        change_list_template = "students/student_change_list_other.html"

我该怎么做

1 个答案:

答案 0 :(得分:1)

我认为您需要覆盖changelist_view并对其返回的TemplateResponse()进行操作,或者在该调用之前更改保存该名称的变量。

原始功能就像这样

def changelist_view(self, request, extra_context=None):
    # a lot of stuff happen here
    return TemplateResponse(request, self.change_list_template or [
        'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
        'admin/%s/change_list.html' % app_label,
        'admin/change_list.html'
    ], context, current_app=self.admin_site.name)

所以我觉得像

这样的代码
def changelist(self, request, extra_context=None):
    if request.GET['foo']:
        self.change_list_template = "students/student_change_list_other.html"

    return super(STUDENTAdmin, self).changelist_view(request, extra_context)