我在数据库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标签的手段。
您可以或可能应该使用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})
- 用过滤器从DB获取数据。
- 带标签结果,然后再次过滤它们。