Я только что попытался добавить пагинатор для своей страницы результатов поиска, но это не сработало. У меня 10 статей в результатах поиска и я ставлю по 3 на каждую страницу, что означает, что всего список результатов будет разбит на 4 страницы. Однако, когда я искал ключевые слова, он показывал все 10 статей на одной странице, и пагинатор не работал.
Мой view.py:
def search_titles(request):
q = request.GET.get('q')
error_msg = ''
if not q:
error_msg = 'Please enter keywords!'
return render(request, 'search_results.html', {'error_msg': error_msg})
else:
nq = q.split(' ')
a_list = Q(article_ti__icontains=nq[0]) | Q(article_content__icontains=nq[0]) | Q(
abstract__icontains=nq[0]) | Q(
author__icontains=nq[0])
for i in nq[1:]:
a_list.add(Q(article_ti__icontains=i) | Q(article_content__icontains=i) | Q(abstract__icontains=i) | Q(author__icontains=i), a_list.connector)
queryset = Article.objects.filter(a_list).distinct()
queryset_count = queryset.count()
paginator = Paginator(queryset, 3)
page_var = 'page'
page = request.GET.get(page_var, 1)
try:
sets = paginator.page(page)
except PageNotAnInteger:
sets = paginator.page(1)
except EmptyPage:
sets = paginator.page(paginator.num_pages)
return render(request, 'search_results.html', {'error_msg': error_msg, 'b_list': queryset, 'a_list_count': queryset_count, 'sets': sets, 'page_var':page_var})
мой код HTML:
<div class = "ui text container">
{% if error_msg %}
<p>{{ error_msg }}</p>
{% else %}
{% for a in b_list %}
<div class = "ui segment">
<a target = "_blank" href = {{ a.get_abs_url }}>
<h3>{{ a.article_ti }}</h3>
<h5>{{ a.author }}</h5>
<p>{{ a.abstract }}</p>
</a>
</div>
{% empty %}
<div class = "ui segment">No results for '{{ request.GET.q }}'</div>
{% endfor %}
{% endif %}
</div>
<div class = "pagination" id = "m">
<span class = "step-links">
{% if sets.has_previous %}
<a href = "?{{ page_var }}=1&q = {{ request.GET.q }}" title = "First"><<</a>
<a href = "?{{ page_var }} = {{ sets.previous_page_number }}&q = {{ request.GET.q }}" title = "Previous"><</a>
{% endif %}
<span class = "current"><input name = "enter_page" value = "{{ sets.number }}" id = "page_num"> of {{ sets.paginator.num_pages }}</span>
{% if sets.has_next %}
<a href = "?{{ page_var }} = {{ sets.next_page_number }}&q = {{ request.GET.q }}" title = "Next">></a>
<a href = "?{{ page_var }} = {{ sets.paginator.num_pages }}&q = {{ request.GET.q }}" title = "Last">>></a>
{% endif %}
</span>
</div>
Я попробовал несколько методов в stackoverflow, но все равно не работает. Может ли кто-нибудь дать мне несколько предложений?
Я буду очень признателен, если вы можете мне помочь!
В вашем шаблоне вы перебираете "b_list",
{% for a in b_list %}
<div class = "ui segment">
<a target = "_blank" href = {{ a.get_abs_url }}>
<h3>{{ a.article_ti }}</h3>
<h5>{{ a.author }}</h5>
<p>{{ a.abstract }}</p>
</a>
</div>
{% empty %}
<div class = "ui segment">No results for '{{ request.GET.q }}'</div>
{% endfor %}
изменить это на,
{% for a in sets %}
<div class = "ui segment">
<a target = "_blank" href = {{ a.get_abs_url }}>
<h3>{{ a.article_ti }}</h3>
<h5>{{ a.author }}</h5>
<p>{{ a.abstract }}</p>
</a>
</div>
{% empty %}
<div class = "ui segment">No results for '{{ request.GET.q }}'</div>
{% endfor %}