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

2024-10-02 08:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个搜索系统,可以与Q:

Post.objects.filter(Q(name__icontains=keyword) | Q(description__icontain=keyword))

它工作得很好,但问题是当用户搜索'<strong>''strong'时,它将返回包含'<strong>'单词的行,但不应考虑HTML标记。你知道吗

那么,如何使用Django ORM搜索HTML内容中不考虑HTML标记的值呢?你知道吗


Tags: 代码用户name标记数据库objects系统html
3条回答

您可以或者应该使用haystack来研究一个合适的搜索函数,如果您不使用核心搜索函数,我最喜欢的搜索引擎是whoosh(pip install whoosh)。您可以这样定义要编入索引的内容:

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

这是相当容易设置,一旦你做了,设置为下一个项目将在几分钟内。你知道吗

我可能会添加另一个名为stripped_description的字段,并使用django的striptags过滤器去除html标记,然后让django搜索该字段。如果需要显示HTML代码,它仍然会找到需要调用实际的description字段的行,但这是我用来“忽略”HTML标记的唯一方法。你知道吗

我觉得这是个好动作:

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. 正在使用筛选器从数据库获取数据。你知道吗
  2. 剥离结果标签,然后再次过滤。你知道吗

相关问题 更多 >

    热门问题