我想在 Django 中为订单列表创建分页。似乎所有内容都编码正确,但由于某种原因,当我访问网页时,它显示“页面”,而不是指向其他页面的链接。 '
对这篇文章的格式表示歉意,因为这是我第一次发布问题,并注意有 7 个有序对象,因此应该有一个页面。
我的代码如下所示:
模型.py
class Order(models.Model):
date = models.DateField('Date', null=True, blank=True)
car = models.ForeignKey(Car, on_delete=models.SET_NULL, null=True)
ORDER_STATUS = (
('p', 'Processing'),
('o', 'Ordered'),
('s', 'In service'),
('c', 'Completed'),
('t', 'Taken back by customer')
)
status = models.CharField(max_length=1, choices=ORDER_STATUS,
blank=True, default='p')
@property
def order_total_price(self):
order_rows = self.order_row.all()
total_price = sum(row.total_price for row in order_rows)
return round(total_price)
@property
def order_rows(self):
return ', '.join(str(el) for el in self.order_row.all())
def __str__(self):
return f'{self.car}'
views.py
class OrderListView(generic.ListView):
model = Order
context_object_name = "orders"
template_name = "orders.html"
paginate_by = 5
url.py
from django.urls import path, include
from . import views
urlpatterns = [
path('index/', views.index, name="index"),
path('cars/', views.cars, name='cars'),
path('car/<int:pk>/', views.car_detail, name='car_detail'),
path('orders/', views.OrderListView.as_view(), name='orders'),
path('order/<int:order_id>/', views.order_detail, name='order_detail'),
path('search/', views.search_results, name='search_results'),
path('', views.index, name='index'),
]
和orders.html
{% extends 'base.html' %}
{% block header %}Orders{% endblock %}
{% block content %}
<div class="pagination">
<span class="step-links">
{% if orders.has_previous %}
<a href="?page=1">« First</a>
<a href="?page={{ orders.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ orders.number }} of {{ orders.paginator.num_pages }}.
</span>
{% if orders.has_next %}
<a href="?page={{ orders.next_page_number }}">Next</a>
<a href="?page={{ orders.paginator.num_pages }}">Last »</a>
{% endif %}
</span>
</div>
<h2>List of Orders</h2>
<ul>
{% for order in orders %}
<li>
<a href="{% url 'order_detail' order.id %}">
{{ order.car.client }} - {{ order.car.car_model.brand }}
{{ order.car.car_model.model }} {{ order.car.license_plate }}<br>
</a>
</li>
<br>
{% endfor %}
</ul>
{% endblock %}
Django 文档 指出上下文是用分页器和 page_obj 填充的。因此,您需要引用这些 iso 订单(基本上是模型的查询集)。
根据您的示例:
page_obj.has_previous
iso
orders.has_previous
page_obj.previous_page_number
iso
orders.previous_page_number