2012-06-12 94 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. 添加您的模板標籤在管理基本模板已複製

這是一些工作,但希望你所需要的一切被記錄在案。

相關問題