当我在 Django 中使用 generic.ListView 类时分页不起作用

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

我想在 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">&laquo; 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 &raquo;</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 django-views django-templates
1个回答
0
投票
该类上的

Django 文档 指出上下文是用分页器和 page_obj 填充的。因此,您需要引用这些 iso 订单(基本上是模型的查询集)。

根据您的示例:

    使用
  • page_obj.has_previous
     iso 
    orders.has_previous
    
    
  • 使用
  • page_obj.previous_page_number
     iso 
    orders.previous_page_number
    
    
等等...

© www.soinside.com 2019 - 2024. All rights reserved.