2013-11-09 56 views
0

我試圖做一個應用程序,我需要一些圖像的背景顏色根據「嚴重性」,紅色,黃色或綠色的「報告」進行更改。web2py - for循環和函數來改變背景顏色?

的視圖(index.html的):

歡迎{{= auth.user.first_name}}

{{爲在報告中報告:}}

類型=「文本/css">.eq_img {背景色:{{= bg_c​​olor(reports.severity)}(式中標記)

表與圖像類= eq_img

控制器(default.py):

DEF設備():

報道=分貝()選擇(db.repo.ALL)

返回當地人()

模型(db.py):

db.define_table( '回購',

字段( '體', '文本',需要= IS_LENGTH(500,1),標記= 「報告」),

字段( '嚴重性',需要= IS_IN_SET([ '綠色' , '黃色', '紅色')),

字段( 'posted_on', '日期時間',可讀=假,可寫= FALSE),

字段( 'posted_by', '參考AUTH_USER',可寫=假),

def bg_c​​olor(severity):

如果嚴重性== 「紅」:

回報 '紅'

elif的嚴重性== 「黃色」:

回報 '黃'

其他:

return'green'

現在它總是返回列表中最後一個報告的顏色。我需要它找到最嚴重的報告,如果不是紅色,那麼黃色,然後是綠色。任何幫助非常感謝。

回答

0

這並不完全清楚你想要做什麼,但如果你想設置背景顏色。eq_img類由您的查詢返回的所有記錄中目前最高級別的價值,你可以做這樣的事情:

在模型:

severities = ['Green', 'Yellow', 'Red'] 

db.define_table('repo', 
    Field('body','text',requires=IS_LENGTH(500,1),label="report"), 
    Field('severity', requires=IS_IN_SET(severities)), 
    Field('posted_on','datetime', readable=False, writable=False), 
    Field('posted_by','reference auth_user', writable=False)) 

在控制器:

def equipment(): 
    reported = db().select(db.repo.ALL) 
    max_severity = max([severities.index(r.severity) for r in reported]) 
    severity_color = severities[max_severity].lower() 
    return dict(reported=reported, severity_color=severity_color) 

上面,max_severity是一個整數(0,1或2),對應於記錄中找到的最大嚴重性級別。

鑑於:

.eq_img {background-color:{{=severity_color}};} 

注意,上面不應該在for循環中,作爲原密碼。

+0

這正是我所需要的,謝謝。將嘗試編輯問題,以便更清楚一點,以供參考。如果我可以要求跟進;如果我在設備視圖中爲9臺設備配備了9張圖像的表格,那麼控制器有car_reported,house_reported等等,我需要重複每個設備的代碼嗎?例如。 car_max_severity = ...和car_severity_color = ...並且視圖將變爲#car_img {background-color:...?它可以工作,但我會以不太符合DRY標準的方式假設。 – artothief

+0

你可能會讓它更幹。也許可以用「car」,「house」等鍵使max_severity變成一個字典。對於CSS,而不是'#car_img',也許可以使用'#car.eq_img','#house.eq_img'等。然後,一切都可以通過遍歷類別名稱完成。 – Anthony

+0

謝謝。這將是完美的。最後一個問題,如果沒有一個設備的報告,代碼不會運行,因爲max_severity沒有參數。 – artothief