安全过滤带高亮模板标签的django-haystack

5 投票
5 回答
2455 浏览
提问于 2025-04-16 10:51

我正在使用Django Haystack在我的网站上进行搜索,但我需要过滤掉我的TextField中的所有HTML代码,并使用模板过滤器“safe”来高亮显示搜索结果,以符合搜索标准。

有没有办法做到这一点?我试过

{% highlight result.object.content|safe with query %}

但没有成功。

5 个回答

0

你真正想要的是在HTML文档中突出显示某些词汇。这个问题其实挺复杂的(用安全的方法是没用的)。假设你的内容是:

<h1>my title</h1>
my content

如果用户在搜索框中输入content,你希望得到的结果大概是这样的:

<h1>my title</h1>
my <em>content</em>

但是等一下,如果用户在搜索框中输入h1呢?如果你直接应用算法,你可能会得到:

<<em>h1</em>>my title</<em>h1</em>>
my content

所以,为了解决这个问题,突出显示的工具应该:

  1. 解析HTML。
  2. 在解析后的文档中进行高亮。
  3. 打印出文档。

不幸的是,我不知道是否有人为haystack写过这样的高亮工具。不过你可以自己写一个。这里有个说明,教你怎么做:http://django-haystack.readthedocs.org/en/latest/highlighting.html

1

我也遇到过这个问题,解决的方法是使用 with 标签:

{% load highlight %}
{% with obj.text|safe as text %}
    {% highlight text with my_query %}
{% endwith %}

这个方法对我有效 :)

2

你可别忘了加载 {% highlight %} 模板标签哦!

撰写回答