Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Admin将变量传递给base_site.html_Python_Django_Django Admin - Fatal编程技术网

Python Django Admin将变量传递给base_site.html

Python Django Admin将变量传递给base_site.html,python,django,django-admin,Python,Django,Django Admin,我正在使用django livesettings将网站标题保存到数据库中。但是,为了能够访问配置值,您需要通过视图将变量传递给模板: 我可以重写admin.ModelAdmin类的哪个方法来将变量传递到base_site.html,其中包含管理站点标题“Django site admin” 这个答案可能很接近,但我不知道它遗漏了什么: 第二个链接是关于向ModelAdmin的变更列表页面添加额外变量的 base\u site.html被许多管理页面和视图扩展,如果您想要一些全局更改,您需要扩展

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

我可以重写admin.ModelAdmin类的哪个方法来将变量传递到base_site.html,其中包含管理站点标题“Django site admin”

这个答案可能很接近,但我不知道它遗漏了什么:

第二个链接是关于向
ModelAdmin
的变更列表页面添加额外变量的

base\u site.html
被许多管理页面和视图扩展,如果您想要一些全局更改,您需要扩展所有相关视图的上下文,或者通过覆盖
base\u site.html
本身。我发现的最优雅的解决方案是:

本质上,它覆盖了管理站点的
每个\u上下文
方法,以根据需要添加尽可能多的自定义变量。更新后的上下文将应用于所有管理页面,无需进一步努力

在我的例子中,我希望有一个自定义的页脚显示发布版本信息。此信息取自一个文件,该文件在部署期间使用
git descripe
命令自动更新

文件:
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 %}
{%block footer%}
我的管理员{{releaseTag}版权和副本;麦可

{%endblock%}
我应该在哪个视图中添加上下文变量?@Ygam这取决于您的要求:自定义在哪个管理页面生效。您可以检查
django.contrib.admin.sites.get_url()
django.contrib.admin.options.get_url()
以找出实际的管理员视图所在的位置。诸如
索引
更改视图
更改列表
等视图通常提供用于添加额外上下文的API(
额外上下文=签名中无
)。您可以扩展
adminisite
ModelAdmin
来实现它。如果您的自定义是全局的,只需通过在模板加载期间将其复制到具有更高优先级的目录来覆盖
base\u site.html
,然后对其进行修改。如何使用自定义功能将您需要的livesettings变量添加到模板上下文中?