0

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' %}">
                &laquo; first</a>
        </li>
        <li class="page-item">
            <a class="page-link" 
            href="{% url 'find' %}{{data.previous_page_number}}">
                &laquo; prev</a>
        </li>
        {% else %}
        <li class="page-item">
            <a class="page-link">
                &laquo; first</a>
        </li>
        <li class="page-item">
            <a class="page-link">
                &laquo; 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 &raquo;</a>
        </li>
        <li class="page-item">
            <a class="page-link" 
            href="{% url 'find' %}{{data.paginator.num_pages}}">
                last &raquo;</a>
        </li>
        {% else %}
        <li class="page-item">
            <a class="page-link">
                next &raquo;</a>
        </li>
        <li class="page-item">
            <a class="page-link">
                last &raquo;</a>
        </li>
        {% endif %}
    </ul>

The code of "find.html" I omitted first few codes because it's not necessary in this question.

daylyroppo
  • 67
  • 4
  • Can you use this href="{% url 'find' data.next_page_number %}" in all href of find.html – Nahidur Rahman Sep 17 '20 at 08:52
  • in your `else` statement (which is a GET request), your data ="" so it doesn't return anything. The action of clicking to a page is GET request. That or you just set `num=1` always in your function – Linh Nguyen Sep 17 '20 at 09:03
  • No I can not use href="{% url 'find' data.next_page_number %}" – daylyroppo Sep 17 '20 at 14:21

0 Answers0