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

如何让RichText的两个自定义文本着色功能实现互斥效果

解决方案

要实现两个自定义内联颜色样式的互斥效果,不需要额外编写复杂的自定义逻辑,Draftail原生支持同组内联样式的互斥能力,仅需要给两个颜色样式的control配置添加相同的style_type分组属性即可,逻辑和内置h标签互斥完全一致。


完整修改后可直接使用的代码示例

@hooks.register('register_rich_text_features')
def register_redtext_feature(features):
    feature_name = 'redtext'
    type_ = 'RED_TEXT'
    tag = 'span'

    control = {
        'type': type_,
        'label': 'Red',
        'style': {'color': '#bd003f'},
        # 新增:指定样式分组,两个颜色使用相同的分组名即可实现互斥
        'style_type': 'custom_text_color',
    }

    features.register_editor_plugin(
        'draftail', feature_name, draftail_features.InlineStyleFeature(control)
    )

    db_conversion = {
        # 优化:添加class限定,避免和其他同标签样式的转换逻辑冲突
        'from_database_format': {'span[class="text-primary"]': InlineStyleElementHandler(type_)},
        'to_database_format': {
            'style_map': {
                type_: {'element': tag, 'props': {'class': 'text-primary'}}
            }
        },
    }

    features.register_converter_rule(
        'contentstate', feature_name, db_conversion
    )

# 另一个颜色样式实现,仅颜色、类名、标识等参数不同,分组名保持一致
@hooks.register('register_rich_text_features')
def register_bluetext_feature(features):
    feature_name = 'bluetext'
    type_ = 'BLUE_TEXT'
    tag = 'span'

    control = {
        'type': type_,
        'label': 'Blue',
        'style': {'color': '#0d6efd'},
        # 和红色样式使用完全相同的分组名
        'style_type': 'custom_text_color',
    }

    features.register_editor_plugin(
        'draftail', feature_name, draftail_features.InlineStyleFeature(control)
    )

    db_conversion = {
        'from_database_format': {'span[class="text-secondary"]': InlineStyleElementHandler(type_)},
        'to_database_format': {
            'style_map': {
                type_: {'element': tag, 'props': {'class': 'text-secondary'}}
            }
        },
    }

    features.register_converter_rule(
        'contentstate', feature_name, db_conversion
    )

关键说明

  • style_type的值可以自定义,只要需要互斥的颜色样式的该参数值完全一致即可,Draftail会自动将同分组的内联样式设为互斥状态,选中其中一个会自动取消同组其他样式的选中状态。
  • 如果后续需要新增更多颜色选项,只要保持style_type值相同,都会自动加入互斥逻辑。
  • 新增的class限定是为了避免数据库转换时多个span样式识别冲突,确保从数据库读取内容时能正确还原对应的颜色样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:39:04