使用Django中的全文搜索(Full Text Search)扩展你的应用程序
在Django中,我们可以使用第三方库来实现全文搜索功能。其中比较流行的有两个库:Haystack和Django Full Text Search。
下面演示如何使用Django Full Text Search来实现全文搜索功能:
- 安装Django Full Text Search:
pip install django-fulltext-search
- 在settings.py中添加以下配置:
INSTALLED_APPS = [ ... 'django_fulltext_search', ] FULLTEXT_SEARCH_RESULT_LIMIT = 20 # 搜索结果最大数量,可选配置
- 在models.py中定义需要搜索的模型类,如:
from django.db import models from django_fulltext_search import FullTextSearchMixin class BlogPost(FullTextSearchMixin, models.Model): title = models.CharField(max_length=100) content = models.TextField() def __str__(self): return self.title
其中,需要使用FullTextSearchMixin来添加全文搜索功能。
- 执行数据库迁移操作:
python manage.py makemigrations python manage.py migrate
- 在views.py中添加搜索视图:
from django.views.generic import ListView from django_fulltext_search.controller import SearchListMixin from .models import BlogPost class SearchResultsView(SearchListMixin, ListView): model = BlogPost template_name = 'search_results.html' paginate_by = 10 search_fields = ['title', 'content']
其中,我们使用SearchListMixin来添加搜索功能。需要指定model,search_fields(需要搜索的字段),template_name和paginate_by等参数。
- 在urls.py中添加搜索路由:
from django.urls import path from .views import SearchResultsView urlpatterns = [ path('search/', SearchResultsView.as_view(), name='search_results'), ]
- 在templates中添加搜索页面,如search_results.html:
{% extends 'base.html' %} {% block content %} {% if query %} <h2>Search results for "{{ query }}"</h2> {% if object_list %} {% for post in object_list %} <div class="post"> <h4><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h4> <p>{{ post.content|truncatechars:200 }}</p> </div> {% endfor %} {% if page_obj.has_previous %} <a href="?q={{ query }}&page={{ page_obj.previous_page_number }}">previous</a> {% endif %} <span class="current-page">{{ page_obj.number }}</span> <span class="total-pages">{{ page_obj.paginator.num_pages }}</span> {% if page_obj.has_next %} <a href="?q={{ query }}&page={{ page_obj.next_page_number }}">next</a> {% endif %} {% else %} <p>No results found.</p> {% endif %} {% endif %} {% endblock %}
其中,我们展示了搜索结果,并使用了分页功能。
- 在模板中添加搜索表单,如base.html:
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Blog</title> <link rel="stylesheet" href="{% static 'css/style.css' %}"> </head> <body> <nav> <ul> <li><a href="#">Home</a></li> <li><a href="{% url 'search_results' %}">Search</a></li> </ul> </nav> <div class="container"> <form method="GET" action="{% url 'search_results' %}"> <input type="text" name="q" placeholder="Search..."> <button type="submit">Go</button> </form> {% block content %} {% endblock %} </div> </body> </html>
在表单中添加了搜索框和提交按钮。
- 启动Django服务器,测试搜索功能。
以上就是使用Django Full Text Search实现全文搜索功能的全部过程。如果使用字符串作为范例,可以搜索“pidancode.com”或“皮蛋编程”来测试搜索效果。
相关文章