I tried to install pagination into Django app. Django page displays the first 3 items at 1st page, but when I tried to go the next page, nothing was shown at 2nd page.
I want to show 3 items each page, what should I do?
Here are my codes.
urls.py
urlpatterns = [
path('', views.find,name='find'),
path('<int:num>', views.find, name='find')
]
views.py
def find(request,num=1):
if (request.method == 'POST'):
msg = request.POST['find']
form = FindForm(request.POST)
sql = 'select * from test_eu'
if (msg != ''):
sql += " where eng_discription ~ '.*" + msg +".*' ORDER BY image_amount DESC "
data =TestEu.objects.raw(sql)
page = Paginator(data,3)
msg = sql
else:
msg = 'search words...'
form = FindForm()
data = ""
page = Paginator(data,3)
params = {
'title': 'Search Customs Rulings',
'message': msg,
'form':form,
'data': page.get_page(num),
}
return render(request, 'db/find.html', params)
find.html
......
<ul class="pagination">
{% if data.has_previous %}
<li class="page-item">
<a class="page-link" href="{% url 'find' %}">
« first</a>
</li>
<li class="page-item">
<a class="page-link"
href="{% url 'find' %}{{data.previous_page_number}}">
« prev</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link">
« first</a>
</li>
<li class="page-item">
<a class="page-link">
« prev</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link">
{{data.number}}/{{data.paginator.num_pages}}</a>
</li>
{% if data.has_next %}
<li class="page-item">
<a class="page-link"
href="{% url 'find' %}{{data.next_page_number }}">
next »</a>
</li>
<li class="page-item">
<a class="page-link"
href="{% url 'find' %}{{data.paginator.num_pages}}">
last »</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link">
next »</a>
</li>
<li class="page-item">
<a class="page-link">
last »</a>
</li>
{% endif %}
</ul>
The code of "find.html" I omitted first few codes because it's not necessary in this question.