Кнопка следующей пагинации не отключается при достижении лимита запроса с использованием Flask - PullRequest
0 голосов
/ 18 июня 2020

У меня проблема, из-за которой я пытаюсь остановить разбиение на страницы, когда достигаю предела / максимума запроса. Поскольку мои знания о структуре данных довольно низки, я бы спросил вас, какое было бы лучшее решение для решения этой проблемы?

app.py:

@app.route('/electronics/')
@app.route('/electronics/<page>/<limit>')
def electronics(page=1, limit=6):
    page=int(page)
    limit=int(limit)
    start_index = page * limit - limit
    end_index = start_index + 6
    all_products = mongo.db.products.find({'category_name':"Electronics"}).sort("$natural", pymongo.DESCENDING)
    page_number =math.ceil(all_products.count()/6)
    maximum = math.floor( (mongo.db.products.count_documents({})) / limit - 1)
    electronics =  all_products[start_index:end_index]
    return render_template(
        'electronics.html',
        electronics= electronics,
        page=page,
        pages=range(1, int(page_number)+1),
        maximum=maximum,
        limit=limit
    )

electronics. html

 <ul class="pagination pg-amber justify-content-center">
        <!--Previous button-->
        <li {% if page==1 %} class="page-item disabled" {% endif %}>
          <a class="page-link" {% if page>1 %}href="{{ url_for('electronics', page=page, limit=limit) }}"{% endif %}>
                            Previous
                        </a>
        </li>

        <!--Middle of the pagination-->

        {% for p in pages %}
        <li class="page-item{% if  p == page  %} active{% endif %}">
          <a class="page-link" href="{{ url_for('electronics', page=p, limit=limit) }}">{{ p }}</a>
        </li>
        {% endfor %}



       <--HERE IS THE ISSUE -->

        <!--Next button-->
        <li {% if page==maximum %} class="page-item disabled" {% endif %}>
          <a class="page-link" {% if page!=maximum %}href="{{ url_for('electronics', page=page, limit=limit) }}" {% endif %}>
                            Next
                        </a>
        </li>
      </ul>

Я почти уверен, что проблема в максимальной переменной, но мне не удалось найти решение этой проблемы.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Переменная maximum должна быть ceil -ed. У вас просто math(

0 голосов
/ 18 июня 2020

Я нашел ответ на этот вопрос после долгой работы над ним. Итак, поскольку переменная maximum получила все продукты вместо категории electronic, она не работала в этой функции, получая все продукты из БД. Поэтому я попытался получить все товары из категории electronic, то есть page_number. Тем не менее, я добавил его на страницу условно вместо maximum, как показано выше, и это сработало.

app.py

@app.route('/electronics/')
@app.route('/electronics/<page>/<limit>')
def electronics(page=1, limit=6):
    page=int(page)
    limit=int(limit)
    start_index = page * limit - limit
    end_index = start_index + 6

    # used for page_number
    all_products = mongo.db.products.find({'category_name':"Electronics"}).sort("$natural", pymongo.DESCENDING)

    # used for the loop in template
    page_number =math.ceil(all_products.count()/6)

    electronics =  all_products[start_index:end_index]
    return render_template(
        'electronics.html',
        electronics= electronics,
        page=page,

        #added page_number instead of maximum
        page_number=page_number,

        pages=range(1, int(page_number)+1),
        limit=limit

электроника. html

  <li {% if page == page_number %} class="page-item disabled" {% endif %}>
          <a class="page-link" {% if page!=maximum %}href="{{ url_for('electronics', page=page, limit=limit) }}" {% endif %}>
                            Next
                        </a>
...