Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用django突出显示文本中某列中的特定单词?_Django - Fatal编程技术网

如何使用django突出显示文本中某列中的特定单词?

如何使用django突出显示文本中某列中的特定单词?,django,Django,假设我有3列 文本|主题|连接符 癌症是由风车引起的 这些都保存在postgreSQL数据库中。我如何在文本中突出显示“癌症和风车”(来自主题)和“起因”(来自连接器),并将其显示在网页上 {%if db.text%中的db.cause和db.connector} {{db.text}} 但这突出了整篇文章,而不是那4个字癌症,风车和引起的 更新自@selcuk的建议: 在templatetags/filters.py中: @register.filter def突出显示(文本、搜索): 突出

假设我有3列

文本|主题|连接符

癌症是由风车引起的

这些都保存在postgreSQL数据库中。我如何在文本中突出显示“癌症和风车”(来自主题)和“起因”(来自连接器),并将其显示在网页上

{%if db.text%中的db.cause和db.connector}
{{db.text}}
但这突出了整篇文章,而不是那4个字癌症,风车和引起的

更新自@selcuk的建议:

在templatetags/filters.py中:

@register.filter
def突出显示(文本、搜索):
突出显示=text.replace(搜索“{}”。格式(搜索))
返回标记_安全(突出显示)
在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 %}
{%用于上下文%中的db}
{%if db.text%中的db.cause和db.connector}
{%with cause=db.cause%}
{{db.text |突出显示:原因}
{%endwith%}
{%else%}
{{db.text}}
{%endif%}
最终结果:没有突出显示任何内容,也没有错误消息

所需输出:由于Replace()无法处理不区分大小写的单词/字符,因此只有由和windmill引起的癌症突出显示

Replace()已更改为re.sub

在templatetags/filters.py中:

来自django导入模板的

从django.utils.safestring导入标记_safe
进口稀土
register=template.Library()
@寄存器过滤器
def突出显示(文本、搜索):
搜索=重新拆分(“”),搜索
对于搜索中的i:
高亮显示=re.sub(i,“{}”。格式(i),文本,标志=re.IGNORECASE)
text=突出显示
返回标记_安全(文本)

这不是一项微不足道的任务。我建议您编写一个自定义模板过滤器。我确实尝试过这种方法,但最终结果是它突出显示了每个字母之间的空格。例如,“c a n c e r i s c a u s e b y w i n d m i l.”因此,每个字母之间的每个空格都会突出显示。根据您的描述,传递给筛选函数的
search
参数的值似乎是一个空字符串。在
{%for%}
循环中打印
db.cause
的值,以确认它不是空的。我已经检查了,是的,某些行没有任何原因或连接器。但是,对于那些这样做的行,高光不会出现。现在,它只是按原样显示所有内容,没有任何突出显示。我已经更新了我的代码。请先用一些静态文本测试你的过滤器,例如
{{“foo-bar-baz”|突出显示:“bar”}
,看看它是否正常工作。