【问题标题】:Django Admin Pass A Variable to base_site.htmlDjango 管理员将变量传递给 base_site.html
【发布时间】:2012-06-16 03:23:35
【问题描述】:

我正在使用 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?

【问题讨论】:

  • 自定义 context processor 会如何添加您需要的 livesettings 变量到模板上下文?

标签: python django django-admin


【解决方案1】:

我找到的最优雅的解决方案在这里: 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 %}

【讨论】:

    【解决方案2】:

    第二个链接是关于向ModelAdmin 的更改列表页面添加额外变量。
    base_site.html 被许多管理页面和视图扩展,如果你想要一些全局更改,你需要扩展所有相关视图的上下文,或者用 setting a variable in the context 覆盖 base_site.html 本身

    【讨论】:

    • 我应该在哪个视图中添加上下文变量?
    • @Ygam 这取决于您的要求:自定义在哪个管理页面生效。您可以检查django.contrib.admin.sites.get_urls()django.contrib.admin.options.get_urls() 以找出实际的管理员视图所在的位置。indexchange_viewchange_list 等视图通常提供 API(签名中的extra_context=None)用于添加额外的上下文。您可以扩展 AdminSiteModelAdmin 来实现它。如果您的自定义是全局的,只需在模板加载期间通过将其复制到具有更高优先级的目录来覆盖 base_site.html,然后对其进行修改。
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2023-03-22
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多