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