[英]How to add pagination to search view in django, I tried the below
could you please support adding pagination to the below search function based view, I tried the below but it gives me all the results in one page also when I press on next it return me back to the empty search form page您能否支持将分页添加到以下基于搜索功能的视图中,我尝试了以下操作,但是当我按下一步时,它也将所有结果显示在一页中,它使我返回到空的搜索表单页面
This my function这是我的功能
def post_search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
search_vector = SearchVector('title', weight='A') + \
SearchVector('body', weight='B')
search_query = SearchQuery(query)
results = Post.published.annotate(
search=search_vector,
rank=SearchRank(search_vector, search_query)
).filter(rank__gte=0.3).order_by('-rank')
paginator = Paginator(results, 2) # 3 posts in each page
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer deliver the first page
posts = paginator.page(1)
except EmptyPage:
# If page is out of range deliver last page of results
posts = paginator.page(paginator.num_pages)
return render(request,
'blog/post/search.html',
{'form': form,
'page': page,
'posts': posts,
'query': query,
'results': results})
And here is pagination.html file这是 pagination.html 文件
<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ page.number }} of {{ page.paginator.num_pages }}.
</span>
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}">Next</a>
{% endif %}
</span>
and I included it in the search.html file using the below
{% include "pagination.html" with page=posts %}
You have to use Django's Paginator
你必须使用 Django 的
Paginator
def post_search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
search_vector = SearchVector('title', weight='A') + \
SearchVector('body', weight='B')
search_query = SearchQuery(query)
results = Post.published.annotate(
search=search_vector,
rank=SearchRank(search_vector, search_query)
).filter(rank__gte=0.1).order_by('-rank')
paginator = Paginator(results, 25) # Show 25 results per page.
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request,
'blog/post/search.html',
{'form': form,
'query': query,
'page_obj': page_obj})
You will also have to adjust your template as described in the linked documentation.您还必须按照链接文档中的说明调整模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.