【发布时间】:2019-10-17 00:30:22
【问题描述】:
我对搜索结果进行了分页。首先,查询集给了我完美的结果,但是当我点击任何页码时,它接受搜索键为空并从数据库中获取所有数据。这是代码
Views.py
def youtube_search(request):
query = request.GET.get('q')
Q = SearchDetail.objects.all().filter(query = query).order_by('-datetime')
if request.method=='GET':
page_request_var = 'page'
page = request.GET.get(page_request_var)
paginator = Paginator(Q, 10)
try:
paginated_queryset = paginator.page(page)
except PageNotAnInteger:
paginated_queryset = paginator.page(1)
except EmptyPage:
paginated_queryset = paginator.page(paginator.num_pages)
context = {
'queryset': paginated_queryset,
'page_request_var': page_request_var,
'searchKey':query
}
return render(request, 'home.html', context)
这是我的模板
主页.html
<!DOCTYPE html>
<html>
<body>
<header>
<h3 class="h6">Search the blog</h3>
</header>
<form action="{% url 'search' %}" class="search-form">
<div class="form-group">
<input type="text" name="q" placeholder="What are you looking for?">
<button type="submit">search</button>
</div>
</form>
{% for Q in queryset %}
{{Q.title}}<br/>
{{Q.description}}<br/>
{{Q.datetime}}<br/>
{{Q.thumbnail}}<br/>
{% endfor %}
<nav aria-label="Page navigation example">
<ul class="pagination pagination-template d-flex justify-content-center">
{% if queryset.has_previous %}
<li class="page-item"><a href="?{{ page_request_var }}={{ queryset.previous_page_number }}" class="page-link"> <i class="fa fa-angle-left"></i></a></li>
{% endif %}
{% for num in queryset.paginator.page_range %}
{% if queryset.number == num %}
<li class="page-item"><a href="?{{ page_request_var }}={{ queryset.number }}" class="page-link active">{{ num }}</a></li>
{% elif num > queryset.number|add:'-3' and num < queryset.number|add:'3' %}
<li class="page-item"><a href="?{{ page_request_var }}={{ num }}" class="page-link ">{{ num }}</a></li>
{% endif %}
{% endfor %}
{% if queryset.has_next %}
<li class="page-item"><a href="?{{ page_request_var }}={{ queryset.next_page_number }}" class="page-link"> <i class="fa fa-angle-right"></i></a></li>
{% endif %}
</ul>
</nav>
我在 stackoverflow 中搜索了解决方案。他们都没有回答我的问题 我尝试了从 google 获得的每一段代码。帮我解决这个问题
【问题讨论】:
-
你可以使用通用的
ListView。带有内置分页,ListView -
你能告诉我如何使用 ListView.please
标签: python html django search pagination