所以说我有3列。
文字|主题|连接器
癌症是由风车引起的。癌症,风车|由
引起这些都保存在postgreSQL数据库中。如何在文本中突出显示“癌症和风车”(由主题引起)和“由连接器引起”(由连接器引起),并将其显示在网页上?
{% if db.cause and db.connector in db.text %}
<td><mark>{{ db.text }}</mark></td>
但这突出显示了整个文本,而不是癌症,风车和由之引起的那四个字。
根据@selcuk的建议进行更新:
在templatetags / filters.py中:
@register.filter
def highlight(text, search):
highlighted = text.replace(search, '<mark>{}</mark>'.format(search))
return mark_safe(highlighted)
在page.html中:
{% for db in context %}
{% if db.cause and db.connector in db.text %}
{% with cause=db.cause %}
<td style="word-wrap: break-all">{{ db.text|highlight:cause }}</td>
{% endwith %}
{% else %}
<td style="word-wrap: break-all">{{ db.text }}</td>
{% endif %}
最终结果:什么都没有突出显示,也没有错误消息。
所需输出:仅突出显示由风车引起的癌症
答案 0 :(得分:1)
Replace()已更改为re.sub,因为replace()无法处理不区分大小写的单词/字符。
在templatetags / filters.py中:
from django import template
from django.utils.safestring import mark_safe
import re
register = template.Library()
@register.filter
def highlight(text, search):
search = re.split((" "), search)
for i in search:
highlighted = re.sub(i, '<span style="background-color: #000FF">{}</span>'.format(i), text, flags=re.IGNORECASE)
text = highlighted
return mark_safe(text)