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

使用Django实现HTML文档内指定字符串全局颜色修改的方法

问题根因

Django默认开启了HTML自动转义,你函数返回字符串中的<、>等标签符号会被转义为&lt;、&gt;这类HTML实体字符,因此浏览器不会将其识别为有效HTML标签渲染,只会直接展示明文内容。

解决方案

可根据使用场景选择以下任意一种方式处理:

  • 方案1:函数内标记安全字符串(推荐)
    导入Django内置的mark_safe方法,标记返回结果为无需转义的安全HTML内容,修改后的代码如下:

    from django.utils.safestring import mark_safe
    
    def colored(sentence, string, color):
        if string not in sentence:
            return mark_safe(sentence)
        colored_string = f'<span style="color: {color}"> {string} </span>'
        result = colored_string.join(sentence.split(string))
        return mark_safe(result)
    

    注意:如果sentence是用户提交的不可信内容,该方式存在XSS注入风险,需要先对sentence做转义处理后再执行替换逻辑。

  • 方案2:模板层关闭变量转义
    不需要修改函数代码,直接在模板渲染变量时追加safe过滤器即可:

    <!-- 示例写法,替换为你实际的变量和参数即可 -->
    {{ content|colored:"day,#ff0000"|safe }}
    

可选优化

你当前的实现会替换所有包含目标字符串的片段,比如会把days中的day也错误替换。如果需要精确匹配完整单词,可改用正则加单词边界的方式实现替换,示例如下:

import re
from django.utils.safestring import mark_safe

def colored(sentence, string, color):
    pattern = re.compile(rf'\b{re.escape(string)}\b')
    result = pattern.sub(f'<span style="color: {color}"> {string} </span>', sentence)
    return mark_safe(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03