Django Admin将变量传递给base_site.html

时间:2012-06-16 03:23:35

标签: python django django-admin

我正在使用django-livesettings将网站标题保存到数据库中。但是,为了能够访问配置值,您需要通过视图将变量传递给模板:

http://django-livesettings.readthedocs.org/en/latest/usage.html#accessing-your-value-in-a-view

我可以覆盖admin.ModelAdmin类的哪种方法来将变量传递给base_site.html,其中管理站点标题" Django站点管理员"位于?

这个答案可能会接近但我不知道它错过了什么: Django how to pass custom variables to context to use in custom admin template?

2 个答案:

答案 0 :(得分:0)

第二个链接是关于向ModelAdmin的更改列表页面添加额外变量 base_site.html由许多管理页面扩展,因此视图,如果您想要进行全局更改,则需要扩展所有相对视图的上下文,或者通过setting a variable in the context覆盖base_site.html本身

答案 1 :(得分:0)

我找到的最优雅的解决方案是在这里: https://stackoverflow.com/a/36421610/7521854

从本质上讲,它会覆盖您的管理站点的labels方法,以根据需要添加尽可能多的自定义变量。更新后的上下文无需任何其他操作即可应用于所有管理页面。

就我而言,我想要一个自定义页脚来显示发行版本信息。此信息取自文件,该文件在部署过程中会使用each_context命令自动更新。

文件:git describe

app-name/sites.py

相关的页脚标记为:

class MyAdminSite(AdminSite):
    """ Extends the default Admin site. """
    site_title = gettext_lazy('My Admin')
    site_header = gettext_lazy('My header')
    index_title = gettext_lazy('My Administration')

    def each_context(self, request):
        version_info = ""
        try:
            version_info = os.environ['RELEASE_TAG']
        except KeyError:
            f = open(os.path.join(settings.BASE_DIR, 'assets/version.txt'), 'r')
            version_info = f.read()
            f.close()
            os.environ['RELEASE_TAG'] = version_info

        context = super(MyAdminSite, self).each_context(request)
        context['releaseTag'] = version_info
        return context

admin_site = MyAdminSite(name='my_custom_admin')
相关问题