Python 如何使用django将Paginator添加到搜索结果中?
您好,我想在搜索结果页面中添加分页器如何操作 我的代码: view.py:Python 如何使用django将Paginator添加到搜索结果中?,python,django,python-3.x,django-rest-framework,django-views,Python,Django,Python 3.x,Django Rest Framework,Django Views,您好,我想在搜索结果页面中添加分页器如何操作 我的代码: view.py: def search(request): if request.method == 'GET': query= request.GET.get('q') submitbutton= request.GET.get('submit') if query is not None: home_database= Homepage.objects.filter(Q(name__icon
def search(request):
if request.method == 'GET':
query= request.GET.get('q')
submitbutton= request.GET.get('submit')
if query is not None:
home_database= Homepage.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
pcprograms_database= PCprogram.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
androidapk_database= AndroidApks.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
androidgames_database= AndroidGames.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
antiruvs_database= Antivirus.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
systems_database= OpratingSystems.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
pcgames_database= PCgames.objects.filter(Q(name__icontains=query) | Q(app_contect__icontains=query) | Q(page_url__icontains=query) | Q(app_image__icontains=query))
results= sorted(chain(home_database,pcprograms_database,androidapk_database,androidgames_database,antiruvs_database,systems_database,pcgames_database),key=attrgetter('name'))
paginator = Paginator(results, 2) # Show 25 rows per page
page = request.GET.get('page')
results = paginator.get_page(page)
context={'results': results,
'submitbutton': submitbutton}
return render(request, 'html_file/enterface.html', context)
else:
return render(request, 'html_file/enterface.html')
else:
return render(request, 'html_file/enterface.html')
html页面:
{% if submitbutton == 'Search' and request.GET.q != '' %}
{% if results %}
<h1> <small> Results for <b><i style="color:#337ab7">{{ request.GET.q }}</i></b></small> : </h1>
<br/><br/>
{% for result in results %}
<label id="label_main_app"> <img style="margin-top:.3%;margin-left:.3%" id="img_main_app_first_screen" src="{{result.app_image.url}}" alt="no image found !" height="160" width="165" > {{result.name}} <br><br> <p id="p_size_first_page"> {{result.app_contect}} <br> <br> <a href="{{ result.page_url }}" type="button" class="btn btn-primary"><big> See More & Download </big> </a> </p>
</label>
{% endfor %}
<!–– here for moving to make new pages in search if nedded ––>
{% if results.has_other_pages %}
<ul class="pagination">
{% if results.has_previous %}
<li><a href="?q={{ request.GET.q }}&submit=Search/search-page={{ results.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in results.paginator.page_range %}
{% if results.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?q={{ request.GET.q }}&submit=Search/search-page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if results.has_next %}
<li><a href="?q={{ request.GET.q }}&submit=Search/search-page={{ results.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
{% endif %}
{% endif %}
{%if submitbutton=='Search'和request.GET.q!=''%}
{%if结果%}
{request.GET.q}的结果:
{结果中的结果为%}
{{result.name}
{{result.app_contect}
{%endfor%}
{%if results.has_其他_页面%}
{%if results.has_previous%}
{%else%}
- «李>
{%endif%}
{results.paginator.page_range%}
{%if results.number==i%}
- {{i}(当前)
{%else%}
{%endif%}
{%endfor%}
{%if results.has_next%}
{%else%}
- »李>
{%endif%}
{%endif%}
{%endif%}
{%endif%}
我在django的搜索结果中添加了Paginator,好吗?我把show 2项放在第页,第页有8项
但当我在网站上搜索时,它是show2item好的
并向我显示4页我可以移动到它,但当我按第2页、第3页或第4页时,它没有显示任何原因?Django提供了
分页器
类来执行分页,请检查此处的文档:
因此,在您的视图.py
之后
results= list(chain(home_database,pcprograms_database,androidapk_database,androidgames_database,antiruvs_database,systems_database,pcgames_database))
你可以写
paginator = Paginator(results, 25) # Show 25 rows per page
page = request.GET.get('page')
results = paginator.get_page(page)
context={'results': results,
'submitbutton': submitbutton}
return render(request, 'html_file/enterface.html', context)
HTML文件中的下一步:
{% if submitbutton == 'Search' and request.GET.q != '' %}
{% if results %}
<h1> <small> Results for {{ request.GET.q }} : </small></h1>
<br/><br/>
{% for result in results %}
<label id="label_main_app"> <img style="margin-top:.3%;margin-left:.3%" id="img_main_app_first_screen" src="{{result.app_image.url}}" alt="no image found !" height="160" width="165" > {{result.name}} <br><br> <p id="p_size_first_page"> {{result.app_contect}} <br> <br> <a href="{{ result.page_url }}" type="button" class="btn btn-primary"><big> See More & Download </big> </a> </p>
</label>
{% endfor %}
{% if results %}
<div class="pagination">
<span class="step-links">
{% if results.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ results.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ results.number }} of {{ results.paginator.num_pages }}.
</span>
{% if results.has_next %}
<a href="?page={{ results.next_page_number }}">next</a>
<a href="?page={{ results.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
{% endif %}
{% else %}
<h3> No results for this search </h3>
{% endif %}
{% endif %}
您可以决定使用
公共_键
,在您的情况下,可能是字段名称
?Django提供了分页器
类来执行分页,我在这里回答了一个类似的问题:()您也可以在这里检查文档:()我读了答案,但它对我没有帮助,我不知道你为什么要写代码,我需要在我的代码中添加什么来进行活动分页?请检查下面的答案,我希望它有帮助,否则请随意询问你的疑问。我已经尝试了你的答案,这就是发生的事,我已经在django中添加了分页器来搜索结果,好吗?我把show 2项目放在页面中,我有8个项目在页面中,但当我在网站中搜索时,它是show 2项目好的,并向我显示4个页面,我可以移动到它,但当我按第2、3或4页时,它没有显示任何原因?好的,我这样做了,我现在有一个错误,错误是当用户按“下一页”并转到下一页时,没有结果出现在第2页或第3页等…**我已经添加了8个同名应用程序,所以当我搜索时,我已经在一个页面中看到了6个,但当我按“下一步”时,没有出现应用程序,url更改为172.1.1/search/?page=2okay,,我再次尝试,但没有任何更改,它的保留不显示rest结果,我将更新我的问题,,请查看更新,并感谢您的时间
from operator import attrgetter
results = sorted(
chain(home_database,pcprograms_database,androidapk_database, ..etc),
key=attrgetter('common_key'))