python-3.x 如何根据与Jinja中的字符串匹配的列值突出显示行?

pdtvr36n  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(111)

我在和FLASK和Jinja一起工作。我有一个名为df:

Name      Marks   Remarks
Joseph      40    Warning
Tom         60    Satisfied

字符串
在 flask 中,按如下方式传递 Dataframe :

df=[df.to_html(classes='data', justify='center', header="true",index=False)]


在Jinja中,我有以下代码:

{% for grouped_table in df %}
     {{ grouped_table|safe }}


我想高度的背景下的价值基础上的“备注”栏。当该值为“警告”时,应为红色,否则为绿色。
在下面的文章How to highlight rows based on a column value that only appears x amount of times?中,提到我们可以使用df.style.apply(lambda s: colors)根据值来突出显示单元格。
但是,我不确定如何在Jinja中实现它。是否可以在FLASK中实现逻辑,然后将其传递给Jinja?
提前感谢您的宝贵建议/解决方案!

rsl1atfo

rsl1atfo1#

除了使用to_html之外,还可以使用styler来设置表的属性。
要根据背景颜色设置值,可以使用applymap。这允许将属性直接分配给各个单元格。所有其他属性都可以通过普通的CSS规则来分配。

from flask import (
    Flask, 
    render_template 
)
import pandas as pd 

app = Flask(__name__)

@app.route('/')
def index():
    df = pd.DataFrame(
        [['Joseph', 40, 'Warning'], ['Tom', 60, 'Satisfied']],
        columns=['Name', 'Marks', 'Remarks']
    )

    def bg_color_by_value(value):
        clr = 'red' if value == 'Warning' else 'green'
        return f'background-color: {clr}'

    table = df.style\
            .applymap(bg_color_by_value, subset=['Remarks'])\
            .hide(axis='index')\
            .set_table_attributes('class="dataframe data"')\
            .to_html()

    return render_template('index.html', **locals())

个字符

相关问题