Django:管理员模板在页面刷新后显示旧值

时间:2014-11-25 18:01:30

标签: python django django-templates

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

它有效。好吧。 它正确显示当前日期,但是当我刷新我的网页时,它不会自动更新。它一直在显示旧时光。

除了重新启动调试网络服务器之外没有任何帮助 - 然后它再次显示当前日期,但在页面刷新后它将不会更新。

1 个答案:

答案 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