当使用Flask达到查询限制时,下一个分页按钮未被停用

2024-05-29 07:51:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到一个问题,当我达到查询的限制/最大值时,我试图停止分页。由于我对数据结构的了解非常少,我想问您,解决这个问题的最佳解决方案是什么

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>

我很确定问题出在最大变量上,但我找不到解决这个问题的方法


Tags: appforindexifpageliallstart
2条回答

经过长时间的研究,我找到了这个问题的答案。 因此,由于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

electronics.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>

变量maximum需要ceil-ed。您只需要math(

相关问题 更多 >

    热门问题