使用 Django ORM 在 HTML 内容中搜索不考虑 HTML 标签的值



我在数据库description中有一个字段,该系统将在其中保存HTML代码。

我有一个可与q:

一起使用的搜索系统
Post.objects.filter(Q(name__icontains=keyword) | Q(description__icontain=keyword))

它可以正常工作,但是问题是指用户搜索时的问题,例如'<strong>''strong',它将返回其中包含'<strong>' Word的行,但不应该考虑HTML标签。

那么,如何使用不考虑HTML标签的Django Orm中的HTML内容搜索值?

我可能会添加一个称为stripped_description的第二个字段,并使用Django的striptags过滤器剥离HTML标签,并在该字段上进行Django搜索。它仍然应该找到您需要回忆起包含HTML代码的实际description字段的行,如果您需要显示出来,但这是我唯一用来"忽略" HTML标签的手段。

<</p>

您可以或可能应该使用Haystack查看适当的搜索功能,如果您不执行硬核搜索功能,我最喜欢的搜索引擎是Whoosh(pip install whoosh)。您可以将内容定义为这样的索引:

{{ object.title }}
{{ object.description|strip_tags }}

这很容易设置,一旦完成,设置下一个项目就会在几分钟之内。

我认为这是一个很好的动作:

from django.utils.html import strip_tags
rows = Post.objects.filter(Q(name__icontains=keyword) | Q(description__icontain=keyword))
if rows:
    for j,i in enumerate(rows):
        if keyword not in strip_tags(i.name) and keyword not in strip_tags(i.description):
            del rows[j]
return render(request,'posts.html',{'rows':rows})
  1. 用过滤器从DB获取数据。
  2. 带标签结果,然后再次过滤它们。

相关内容

最新更新