You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python Django:如何为字符串中匹配列表元素的部分修改字体颜色

解决Django模板中指定关键词标红的问题

这问题我之前也碰到过,核心就是要精准匹配my_list2里的关键词(尤其是像"red car"这种多词短语)并替换成带颜色的HTML标签,给你两种实用的解决办法:

方法一:后端预处理字符串(简单直接)

直接在views.py里把需要标红的内容处理好,再传到模板渲染:

# views.py 中的代码
my_list1 = ['I like the hotel.','I like the red car and the tree.']
my_list2 = ['hotel','tree','red car']

# 预处理每个句子,替换关键词为红色字体标签
processed_list = []
for sentence in my_list1:
    processed_sentence = sentence
    # 重点:按关键词长度从长到短排序,避免短词先替换破坏长短语(比如先替换"red"会搞砸"red car")
    for keyword in sorted(my_list2, key=lambda x: len(x), reverse=True):
        processed_sentence = processed_sentence.replace(keyword, f'<font color="red">{keyword}</font>')
    processed_list.append(processed_sentence)

# 把处理后的列表传给模板
return render(request, 'index.html', {'processed_list': processed_list})

然后在index.html里渲染,记得用|safe过滤器告诉Django这是安全的HTML,不要转义:

<table>
{% for item in processed_list %}
    <tr>
        <td>{{ item|safe }}</td>
    </tr>
{% endfor %}
</table>

方法二:自定义模板过滤器(更灵活)

如果不想在后端处理,也可以写个自定义模板过滤器,让模板自己处理关键词标红:

  1. 先在你的Django应用下创建templatetags文件夹,里面新建两个文件:__init__.py(空文件即可)和custom_filters.py

  2. custom_filters.py里写过滤器逻辑:

from django import template

register = template.Library()

@register.filter
def highlight_keywords(text, keywords):
    # 确保传入的关键词是列表格式
    if not isinstance(keywords, list):
        keywords = [keywords]
    # 同样按长度倒序处理关键词
    for keyword in sorted(keywords, key=lambda x: len(x), reverse=True):
        text = text.replace(keyword, f'<font color="red">{keyword}</font>')
    return text
  1. 最后在index.html里加载过滤器并使用:
{% load custom_filters %}

<table>
{% for item in my_list1 %}
    <tr>
        <td>{{ item|highlight_keywords:my_list2|safe }}</td>
    </tr>
{% endfor %}
</table>

两种方法都能实现你要的效果,选哪种看你需求——后端处理适合一次性搞定,模板过滤器适合需要在多个模板里复用这个功能的场景。

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

火山引擎 最新活动