You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一列值格式化Bokeh DataTable单元格?

解决方案:利用HTMLTemplateFormatter实现条件单元格标红

这个需求用HTMLTemplateFormatter完全可以实现,我之前在Bokeh老版本里也处理过类似场景。核心是借助Bokeh 0.12.13使用的Underscore.js模板引擎,在模板里直接引用另一列的值做条件判断,从而动态设置单元格样式。

具体实现步骤

假设你的数据源中:

  • 已开放天数列的字段名为days_open
  • 预估关闭天数列的字段名为estimated_days
  1. 编写带条件判断的HTML模板
    模板里用<%= 字段名 %>语法引用数据源中的字段,通过三元表达式判断是否需要标红:

    <span style="color: <%= days_open > estimated_days ? 'red' : 'black' %>"><%= estimated_days %></span>
    

    如果需要更醒目的样式(比如背景色),可以修改style属性:

    <span style="background-color: <%= days_open > estimated_days ? 'lightcoral' : 'transparent' %>; color: <%= days_open > estimated_days ? 'white' : 'black' %>"><%= estimated_days %></span>
    
  2. 创建格式化器并绑定到目标列
    把模板传入HTMLTemplateFormatter,再将格式化器指定给预估天数的列:

    from bokeh.models.widgets import DataTable, TableColumn, HTMLTemplateFormatter
    from bokeh.models import ColumnDataSource
    
    # 示例数据源
    source = ColumnDataSource(data={
        'issue_id': [1, 2, 3, 4],
        'days_open': [10, 5, 15, 8],
        'estimated_days': [7, 6, 12, 9]
    })
    
    # 创建自定义格式化器
    estimated_formatter = HTMLTemplateFormatter(template="""
    <span style="color: <%= days_open > estimated_days ? 'red' : 'black' %>"><%= estimated_days %></span>
    """)
    
    # 定义表格列
    columns = [
        TableColumn(field='issue_id', title='问题ID'),
        TableColumn(field='days_open', title='已开放天数'),
        TableColumn(field='estimated_days', title='预估关闭天数', formatter=estimated_formatter)
    ]
    
    # 初始化DataTable
    data_table = DataTable(source=source, columns=columns, width=800, height=400)
    
  3. 集成到Bokeh Server应用
    把data_table添加到你的Bokeh Server布局中即可,运行后就能看到:当days_open大于estimated_days时,预估天数的单元格会自动标红。

关键注意事项

  • 模板中的字段名必须和ColumnDataSource里的字段完全匹配(大小写敏感)
  • 条件表达式会在客户端实时执行,数据源更新时样式会自动同步
  • 0.12.13版本必须用<%= %>语法引用变量,新版Bokeh才支持${}写法,别搞混了

内容的提问来源于stack exchange,提问作者Guilherme Jarentchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:10:11