我有一个继承自LoginRequiredMixin, TemplateView的视图,它使用admin/base_site.html模板作为基础呈现一些数据。我将其视为管理界面的一部分,因此需要管理员登录。我希望通过启用左侧的标准侧边栏导航,使此视图更多地成为Django管理界面的一部分。
请注意,我在任何地方都没有自定义的ModelAdmin定义,我只是在某个预定义的URL上呈现模板。接口中也没有使用任何模型,它解析和显示来自数据库-无关来源的数据。
目前,我只是手动构建所需的上下文数据,例如:
data = super().get_context_data(**kwargs)
data.update(**{
"is_popup": False,
"site_header": None,
"is_nav_sidebar_enabled": True,
"has_permission": True,
"title": "My title",
"subtitle": None,
"site_url": None,
"available_apps": []
})侧边栏是可见的,但显示一个错误消息:

向available_apps ("available_apps": ["my_app"])添加应用程序也没有帮助:

所以我的问题是-我该怎么做?是否有我可以继承的类来实现这种行为?或者我可以调用一个方法来获取base_site.html所需的所有上下文数据?或者我应该在模板中插入一些信息?也许我需要一个AdminSite对象,或者可以以某种方式调用默认对象的方法?
发布于 2022-05-07 10:14:13
偶然地,我注意到django.contrib.admin.sites中有一个django.contrib.admin.sites对象,它被实例化为site。因此,在我的例子中,仅仅使用site就足够了。
from django.contrib.admin import AdminSite
from django.contrib.admin.sites import site
admin_site: AdminSite = site
data.update(**admin_site.each_context(self.request))此外,我可以使用apps来防止导入site成为问题,就像DefaultAdminSite所做的那样:
AdminSiteClass = import_string(apps.get_app_config("admin").default_site)
self._wrapped = AdminSiteClass()发布于 2022-05-06 12:35:09
包含在基本模板中的app_list.html模板需要一个上下文变量available_apps,其结构与描述的这里相同。
由于您可能无法使这包括与您的应用程序正常工作,您也可以覆盖{% block nav-sidebar %}在您的基本模板,并提供一些HTML适合您的用例。
但是毕竟,使用您的应用程序重用为不同的应用程序(admin)创建的模板可能不是一个好主意,因为很难预测它们将如何运行,它们的需求是什么,从长远来看,除了这些维护之外,也将是一个问题,因为将来Django版本可能会改变它们。
发布于 2022-05-07 03:51:46
您必须包括django admin在模板中使用的默认上下文变量。这可以通过调用each_context函数来完成:
data.update(self.admin_site.each_context(request))我也有自定义的管理视图和模板在我的项目,这是很好的工作我。
https://stackoverflow.com/questions/71996754
复制相似问题