首页 文章

Django:使用Admin上下文扩展基于类的视图的上下文

提问于
浏览
2

我有一个基于类的视图,它只显示配置列表 .

使用以下代码将此视图添加到Django Admin站点:

@admin.register(ZbxHostConf)
class ZbxHostConfListViewAdmin(admin.ModelAdmin):
    review_template = 'admin/admzbxhostconf_list.html'

    def get_urls(self):
        urls = super(ZbxHostConfListViewAdmin, self).get_urls()
        my_urls = patterns('',
                           (r'^zbxhostconflist/$', self.admin_site.admin_view(self.review)),
                           )
        return my_urls + urls


    def review(self, request):
        return ZbxHostConfListView.as_view()(request)

该模板扩展了 admin/base_site.html 模板 . 我登录Django Admin站点后才能访问该站点 . 遗憾的是,模板无法访问管理视图提供的上下文数据 .

正如Django文档所示,上下文数据将直接提供给 TemplateResponse 函数:

def my_view(self, request):
        # ...
        context = dict(
           # Include common variables for rendering the admin template.
           self.admin_site.each_context(request),
           # Anything else you want in the context...
           key=value,
        )
        return TemplateResponse(request, "sometemplate.html", context)

对于基于函数的视图,有可能是extra_context参数,但基于类的视图不提供此参数 . 我想我必须修改get_context_data函数,但我真的不明白如何将管理上下文数据提供给基于类的视图的get_context_data函数 . 有什么建议?

1 回答

  • 3

    这可能不是一个正确的答案,但我相信你可以尝试这样的事情 .

    #!/usr/bin/python3
    
    from django.contrib import admin
    
    class MyTemplateView(TemplateView):
        def get_context_data(self, **kwargs):    
            context = super().get_context_data(**kwargs)
            context.update(admin.site.each_context(self.request))
            return context
    

相关问题