【问题标题】:web2py - for loop and function to change background color?web2py - for循环和改变背景颜色的功能?
【发布时间】:2013-11-21 16:15:46
【问题描述】:

我正在尝试制作一个应用程序,我需要根据使用“严重性”、红色、黄色或绿色制作的“报告”来更改某些图像的背景颜色。

视图(index.html):

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

{{对于报告中的报告:}}

type="text/css">.eq_img {background-color:{{=bg_color(reports.severity)}(在样式标签中)

带有图像的表格 class= eq_img

控制器(default.py):

定义设备():

reported = db().select(db.repo.ALL)

返回本地人()

模型(db.py):

db.define_table('repo',

Field('body','text',requires=IS_LENGTH(500,1),label="report"),

字段('severity', requires=IS_IN_SET(['Green', 'Yellow', 'Red'])),

字段('posted_on','datetime', readable=False, writable=False),

Field('posted_by','reference auth_user', writable=False),

def bg_c​​olor(严重性):

如果严重性 == “红色”:

返回“红色”

elif 严重性 == “黄色”:

返回“黄色”

其他:

返回“绿色”

现在它总是返回列表中最后一个报告的颜色。我需要它来找到最严重的报告,如果不是红色,然后是黄色,然后是绿色。非常感谢任何帮助。

【问题讨论】:

    标签: python web2py


    【解决方案1】:

    不完全清楚您要做什么,但是如果您想将 .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 循环中。

    【讨论】:

    • 这正是我所说的,谢谢。将尝试编辑问题,使其更加清晰,以供参考。如果我可以要求跟进;如果我在设备视图中有一个包含 9 个设备的 9 个图像的表格,因此控制器具有 car_reported、house_reported 等,我是否必须为每个设备重复代码?例如。 car_max_severity=... 和 car_severity_color=... 视图将变为 #car_img{background-color:...?它可以工作,但我会以不那么符合 DRY 的方式假设。
    • 你可以让它更干。也许用“car”、“house”等键使 max_severity 成为一个字典。对于 CSS,而不是 #car_img,也许使用 #car.eq_img#house.eq_img 等。然后一切都可以通过遍历类别名称来完成.
    • 谢谢。那将是完美的。最后一个问题,如果没有关于一台设备的报告,则代码不会运行,因为 max_severity 没有参数。
    • 或者只是max([severities.index(r.severity) for r in car_reported] or 0)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2018-07-08
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多