3

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

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

我可以重写 admin.ModelAdmin 类的什么方法来将变量传递给管理站点标题“Django Site Admin”所在的 base_site.html?

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

4

2 回答 2

2

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

本质上,它会覆盖您的管理站点的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')

相关的页脚标签是:

{% block footer %}
<div class="copyright-center">
    <p><small>My Admin {{releaseTag}} Copyright &copy; MyCo</small></p>
</div>
{% endblock %}
于 2020-09-24T11:16:55.190 回答
0

第二个链接是关于向 a 的更改列表页面添加额外的变量ModelAdmin
base_site.html许多管理页面和视图扩展,如果您想要一些全局更改,您需要扩展所有相关视图的上下文,或者通过在上下文中设置变量来base_site.html覆盖自身

于 2012-06-16T03:59:00.420 回答