我正在使用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?
答案 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')