下面我来为你详细讲解一下“Django用内置方法实现简单搜索功能的方法”的完整攻略。
1. 创建搜索表单
首先,我们需要创建一个搜索表单,方便用户输入搜索关键字。这个表单一般包括一个输入框和一个搜索按钮。可以借助 Django 的内置 forms
模块来实现。示例代码如下:
from django import forms
class SearchForm(forms.Form):
keyword = forms.CharField(label='关键字', max_length=100)
这段代码定义了一个名为 SearchForm
的搜索表单,包含一个名为 keyword
的输入框。
2. 创建搜索视图
接下来,我们需要创建一个搜索视图函数,根据用户输入的关键字,从数据库中查询相关数据并返回。可以借助 Django 的内置 ListView
类视图来实现。示例代码如下:
from django.views.generic import ListView
from .models import Article
class SearchView(ListView):
model = Article
template_name = 'search.html'
context_object_name = 'articles'
paginate_by = 10
def get_queryset(self):
keyword = self.request.GET.get('keyword')
if keyword:
queryset = Article.objects.filter(title__icontains=keyword)
else:
queryset = Article.objects.all()
return queryset
这段代码定义了一个名为 SearchView
的搜索视图函数,继承自 Django 内置的 ListView
类视图。定义了模型为 Article
,视图返回的模板为 search.html
,上下文变量名为 articles
,每页显示数量为 10。
其中,在 get_queryset
方法中,我们通过 self.request.GET.get('keyword')
获取用户输入的关键字。如果关键字存在,则通过 filter()
方法查询标题中包含该关键字的文章;否则,查询所有文章。
3. 在模板中使用搜索表单和搜索结果
最后,我们需要在模板中使用搜索表单和搜索结果。示例代码如下:
{% extends "base.html" %}
{% block content %}
<h2>搜索文章</h2>
<form method="get" action="{% url 'search' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">搜索</button>
</form>
{% if articles %}
<h3>搜索结果</h3>
{% for article in articles %}
<div>
<h4><a href="{% url 'article_detail' article.pk %}">{{ article.title }}</a></h4>
<p>{{ article.content|truncatewords:30 }}</p>
</div>
{% endfor %}
{% if page_obj.has_previous or page_obj.has_next %}
<div class="pagination">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}{% if request.GET.keyword %}&keyword={{ request.GET.keyword }}{% endif %}">« 上一页</a>
{% endif %}
<span class="current-page">{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}{% if request.GET.keyword %}&keyword={{ request.GET.keyword }}{% endif %}">下一页 »</a>
{% endif %}
</div>
{% endif %}
{% else %}
<p>暂无搜索结果</p>
{% endif %}
{% endblock %}
这段代码定义了一个名为 search.html
的模板,在模板中通过 form.as_p
将搜索表单渲染出来。在搜索结果部分,通过 articles
变量遍历搜索结果,并显示文章标题和简述。同时,通过内置的分页机制显示分页链接。
以上就是使用 Django 内置方法实现简单搜索功能的完整攻略,其中包含了示例代码和详细的步骤说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django用内置方法实现简单搜索功能的方法 - Python技术站