2012-06-12 42 views
1

我正在运行一组信息亭,每个信息亭都显示来自我的Django应用程序的内容。每个信息亭每分钟都会ping一个像myurl.com/location=downtown的网址,看看是否有更新。给Django添加一个“状态灯”admin

我的models.py看起来像这样。每次模型被ping时,last_updated都会被更新。

class Location(models.Model): 
    name = models.CharField(max_length=20) 
    last_update = models.DateTimeField() 

不幸的是,每隔一段时间,亭子里的浏览器都会崩溃。我想要做的就是在登录后添加到管理界面的前端,点一下绿色或红色指示灯,指示自其中一个位置更新以来它是否已超过5分钟。

这是最好的方式去做心脏跳动的应用程序?如何修改管理界面以给我状态指示灯以查看信息亭是否正常?

回答

3

糟糕,在重新阅读问题之前,我输入了以下内容。因此,如果您想在Location的列表显示屏上显示自定义列,请执行以下操作。否则,请看@ jpic的答案。

-

是的,你可以在一个定义的ModelAdmin定制的方法联系列像这样:

import datetime 
from django.contrib import admin 
from my_app.models import Location 

class LocationAdmin(admin.ModelAdmin): 
    list_display = ('name', 'slug', 'custom_column',) 

    # define the row x column value here 
    def custom_column(self, obj): 
     if obj.last_updated < datetime.datetime.now() - datetime.timedelta(minutes=5): 
      retval = ('red.jpg', 'This location checked in more than 5 minutes') 
     else 
      retval = ('green.jpg', 'This location checked in less than 5 minutes ago') 
     return "<img src='%s' alt='%s' />" % retval 

    # set the column heading here 
    custom_column.short_description = 'Status' 

# don't forget to register the newly sub-classed ModelAdmin 
admin.site.register(Location, LocationAdmin) 

自定义的方法,也可以对模型本身的属性。有关详细信息,请参阅admin docs

0

自从我在Django工作已经有一段时间了,所以我无法帮助您处理代码。但是你的问题似乎在Django中应该很容易。

管理界面有点神奇,我认为你不应该试图破解它来添加状态灯。 (可能他们已经改变了事情,因为我看着Django,也许它现在不是那么神奇?)

但是应该很容易制作一个显示状态的新页面,并且使该页面只对管理员可用。您可以获取Firefox或Chrome的插件来自动刷新页面,这将导致Django重新运行查询并重新构建页面。然后,只需在管理界面中执行管理员操作,就可以打开并刷新该页面。

+0

如果用户当前正在阅读编辑表单中的模型列表,则页面自动刷新可能会很麻烦... – jpic

+0

我只在特定的页面上建议自动刷新,其自身的URL仅显示状态信息。只读页面,不属于管理界面。 – steveha

2
  1. Make a custom template tag如果信息亭被更新

  2. Override the admin base template,即显示的光。复制django/contrib/admin/templates/admin/base_site.htmlyour_project/templates/admin/base_site.html

  3. 添加您的模板标签在管理基本模板已复制

这是一些工作,但希望你所需要的一切被记录在案。