我正在尝试在 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"><
<b>PREV PAGE</b>
</span>
</a>
<a href="">
<span id="next-page">
<b>NEXT PAGE</b>>
</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 %}
有人知道分页是如何实现的吗?
我尝试了@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"><
<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>>
</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 %}