2

我正在运行一组信息亭,每个信息亭都显示来自我的 Django 应用程序的内容。每个信息亭都会像每分钟一样 ping 一个 url myurl.com/location=downtown,看看是否有任何更新。

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

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

不幸的是,信息亭中的浏览器每隔一段时间就会崩溃。我要做的是在管理界面的前面添加,在我登录后,一个绿色或红色的小灯表示自其中一个位置更新以来是否已经超过 5 分钟。

这是为应用程序制作心跳的最佳方式吗?如何修改管理界面以显示状态灯以查看信息亭是否正常?

4

3 回答 3

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)

自定义方法也可以是模型本身的属性。有关详细信息,请参阅管理员文档

于 2012-06-12T21:37:49.923 回答
2
  1. 制作一个自定义模板标签,在更新信息亭时显示灯光

  2. 覆盖管理基本模板,即。复制django/contrib/admin/templates/admin/base_site.htmlyour_project/templates/admin/base_site.html

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

这是一些工作,但希望您需要的所有内容都已记录在案。

于 2012-06-12T02:27:27.777 回答
0

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

管理界面有点神奇,我认为你不应该尝试破解它来添加状态灯。(有可能自从我看了 Django 之后他们已经改变了一些东西,也许现在没那么神奇了?)

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

于 2012-06-12T02:06:50.157 回答