我正在使用Python 3.4和Django 1.7以及PyCharm
我正在尝试通过覆盖AdminSite类来扩展django管理视图
我的custom_admin.py:
class MyAdminSite(AdminSite):
# Text to put at the end of each page's <title>.
site_title = ugettext_lazy('Test panel title')
# My custom variable
import datetime
srv_time = "%s" % datetime.datetime.now()
def each_context(self):
"""
Overriden dictionary of variables returned for
*every* page in the admin site.
"""
return {
'site_title': self.site_title,
'site_header': self.site_header,
'srv_time': self.srv_time,
}
现在我应该能够在templates / admin / base.html中使用我的'srv_time'变量:
Current date: {{ srv_time }}
它有效。好吧。 它正确显示当前日期,但是当我刷新我的网页时,它不会自动更新。它一直在显示旧时光。
除了重新启动调试网络服务器之外没有任何帮助 - 然后它再次显示当前日期,但在页面刷新后它将不会更新。
答案 0 :(得分:1)
这是因为srv_time
被设置为&#39;类&#39;级别属性而不是&#39;实例&#39;级别属性。
Python为两个&#39;类保留了两个名称空间。级别属性和&#39;实例&#39;等级属性。
当Django加载时(当你启动服务器时),它只运行一次srv_time
的计算。这就是为什么当您刷新页面时,它不会重新计算此值。
您需要覆盖__init__
的{{1}}函数,以便在将类实例化为对象时始终运行此计算。
MyAdminSite
或者,您可以在class MyAdminSite(AdminSite):
# Text to put at the end of each page's <title>.
site_title = ugettext_lazy('Test panel title')
# My custom variable
import datetime
srv_time = "%s" % datetime.datetime.now()
def __init__(self, *args, **kwargs):
super(MyAdminSite, self).__init__(*args, **kwargs)
self.srv_time = "%s" % datetime.datetime.now()
def each_context(self):
"""
Overriden dictionary of variables returned for
*every* page in the admin site.
"""
return {
'site_title': self.site_title,
'site_header': self.site_header,
'srv_time': self.srv_time,
}
函数中进行计算。
each_context