Shopify Python API 分页

问题描述 投票:0回答:1

我正在尝试在 Django 应用程序中使用 Shopify API 实现分页,但我不知道该怎么做。我阅读了文档,知道我们可以通过 API 获取资源端点的下一页和上一页的链接,但不知道如何在 Django 应用程序中实现它。

我的观点是这样的:

import shopify
from shopify_app.decorators import shop_login_required
@shop_login_required
def index(request):
    orders = shopify.Order.find(status='any')
    return render(request, 'home/index.html', {'orders': orders})

index.html:

{% extends "base.html" %}
{% load template_tags %}
{% block content %}
<div id="orders">
  <div style="display: flex;">
    <h2 style="width: 50%;">Your recent orders</h2>
  </div>
  {% if orders %}
  <div class="order-list">
    <p id="page-toggle">
      <a href="#">
        <span id="prev-page">&lt;
          <b>PREV PAGE</b>
        </span>
      </a>
      <a href="">
        <span id="next-page">
          <b>NEXT PAGE</b>&gt;
        </span>
      </a>
    </p>
    {% for order in orders %}
    <div class="order box">
      <div class="wrapper">
        <a style='width: 25%; color: black;' href="https://{{ current_shop.domain }}/admin/orders/{{ order.id }}"
          target="_blank">{{ order.name }}</a>
        <span style='width: 25%;'>{{ order.created_at | convert_str_date }}</span>
        <span style='width: 25%;'>{{ order.total_price }} {{ order.currency }}</span>
        <span style='width: 25%;'>From: {{ order.billing_address.name }}</span>
      </div>
      <a href="#" class="download-button">
        <button>DOWNLOAD</button>
      </a>
    </div>
    {% endfor %}
  </div>
  {% else %}
  <em class="note">There are no orders in your store.</em>
  {% endif %}
</div>


{% endblock %}

有人知道分页是如何实现的吗?

python django shopify shopify-api
1个回答
0
投票

我尝试了@rsabrook在这个问题中提到的解决方案。

这是我的观点.py-

import shopify
from shopify_app.decorators import shop_login_required
from django.core.paginator import Paginator

@shop_login_required
def index(request):
    order_list = []
    for order in iter_all_orders():
        order_list.append(order)
    order_list.reverse()
    paginator = Paginator(order_list, 50)
    page_number = request.GET.get('page')
    data = paginator.get_page(page_number)
    return render(request, 'home/index.html', {'orders': data})

def iter_all_orders(status='any'):
    orders = shopify.Order.find(since_id=0, status=status)
    for order in orders:
        yield order
    
    while orders.has_next_page():
        orders = orders.next_page()
        for order in orders:
            yield order

和index.html-

{% extends "base.html" %}
{% load template_tags %}
{% block content %}
<div id="orders">
  <div style="display: flex;">
    <h2 style="width: 50%;">Your recent orders</h2>
  </div>
  {% if orders %}
  <div class="order-list">
    <p id="page-toggle">
    {% if orders.has_previous %}
      <a href="?page={{ orders.previous_page_number }}">
        <span id="prev-page">&lt;
          <b>PREV PAGE</b>
        </span>
      </a>
    {% endif %}
    {% if orders.has_next %}
      <a href="?page={{ orders.next_page_number }}">
        <span id="next-page">
          <b>NEXT PAGE</b>&gt;
        </span>
      </a>
    {% endif %}
    </p>
    {% for order in orders %}
    <div class="order box">
      <div class="wrapper">
        <a style='width: 25%; color: black;' href="https://{{ current_shop.domain }}/admin/orders/{{ order.id }}"
          target="_blank">{{ order.name }}</a>
        <span style='width: 25%;'>{{ order.created_at | convert_str_date }}</span>
        <span style='width: 25%;'>{{ order.total_price }} {{ order.currency }}</span>
        <span style='width: 25%;'>From: {{ order.billing_address.name }}</span>
      </div>
      <a href="#" class="download-button">
        <button>DOWNLOAD</button>
      </a>
    </div>
    {% endfor %}
  </div>
  {% else %}
  <em class="note">There are no orders in your store.</em>
  {% endif %}
</div>


{% endblock %}
© www.soinside.com 2019 - 2024. All rights reserved.