【问题标题】:Django: Extend context of class based view with Admin contextDjango:使用管理上下文扩展基于类的视图的上下文
【发布时间】:2015-07-16 18:45:01
【问题描述】:

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

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

@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 函数。有什么建议吗?

【问题讨论】:

  • 不直接。为了完整起见,我刚刚添加了它。但如果删除会改善问题,我会这样做。

标签: python django


【解决方案1】:

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

#!/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

【讨论】:

  • @PhilippWiesner 它对你有用吗?我没有在我的电脑上运行它。希望对你有帮助
  • 是的,它工作正常,管理上下文数据与视图中的正常数据一起发送。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 2013-01-26
  • 1970-01-01
  • 2020-12-21
  • 2011-08-14
  • 2020-10-19
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多