Django - 分页

如何解决Django - 分页

我正在开发待办事项应用。 我有两种数据,

  1. 即将到来的待办事项和​​i>
  2. 已完成的待办事项。

因此,我将 views.py 中的数据过滤为即将到来的项目和已完成的项目。我想使用分页将它们显示在同一页面上。我也得到了结果,但如果即将到来的项目在第 1 页完成,我无法访问第 2 页,因为第 2 页的即将到来的项目是空的,但我有已完成项目的项目。我没看到。

views.py

@login_required(login_url='login')
def home(request):

    todo_form = TodoForm()
    current = timezone.Now()

    todo_items_upcoming = Todo.objects.filter(user_id=request.user,completed=False).order_by('-date_created')

    todo_items_completed = Todo.objects.filter(user_id=request.user,completed=True)

    pagi1 = Paginator(todo_items_upcoming,4)
    pagi2 = Paginator(todo_items_completed,4)

    page_num = request.GET.get('page')
    page_num2 = request.GET.get('page')

    page_obj = pagi1.get_page(page_num)
    page_obj2 = pagi2.get_page(page_num2)

    if request.method == "POST":
        todo_form = TodoForm(request.POST)
        if todo_form.is_valid():
            data = todo_form.cleaned_data.get('title')

            obj = Todo.objects.create(date_created=current,title=data,user_id=request.user)

    context = {'todo_form':todo_form,'page_obj':page_obj,'page_obj2':page_obj2}
    return render(request,'todo/main.html',context)

ma​​in.html

{% extends 'todo/index.html' %}
{% load crispy_forms_tags %}


{% block content %}

    <nav aria-label="...">
        <ul class="pagination justify-content-center">

            <!-- pagination - prevIoUs pages -->
            {% if page_obj.has_prevIoUs or page_obj2.has_prevIoUs %}

                <li class="page-item">
                    {% if page_obj.has_prevIoUs %}

                        <a class="page-link" href="?page={{ page_obj.prevIoUs_page_number }}" tabindex="-1">&laquo;</a>
                    
                    {% else %}

                        <a class="page-link" href="?page={{ page_obj2.prevIoUs_page_number }}" tabindex="-1">&laquo;</a>

                    {% endif %}
                </li>

            {% endif %}

            <!-- pagination - current page -->
            <li class="page-item active">
                <a class="page-link" href="?page={{ page_obj.number }}">{{ page_obj.number }}</a>
            </li>

            <!-- pagination - Next pages -->
            {% if page_obj.has_next or page_obj2.has_next %}

                <li class="page-item">
                    {% if page_obj.has_next %}

                        <a class="page-link" href="?page={{ page_obj.next_page_number }}">&raquo;</a>
                    
                    {% else %}

                        <a class="page-link" href="?page={{ page_obj2.next_page_number }}">&raquo;</a>

                    {% endif %}
                </li>

            {% endif %}


        </ul>
    </nav>


    <div class="center-column">

        <h2 class="heading" style="text-align: center;">Hello {{ request.user.username }},Here's your Todo List</h2>
        
        <form action="" method="POST" id='form-create'>
            {% csrf_token %}
            <div style="text-align: center;">

                {{ todo_form.title }}
                
                <button type="submit" class="form-control btn btn-primary mb-3 mr-sm-2">Add Items</button>

            </div>
            
        </form>


        <h4 class="heading" style="text-align: center;">Upcoming Todo Items</h4><br>
        <div class="row">
            <div class="col" id="upcomItem">
                <ul class="list-group" id="upcomingItems">

                    {% for i in page_obj %}

                        <li class="list-group-item list-group-item-primary mb-2" id="upcomingItem">{{ i.title }}

                            <div class="float-right">

                                <button type="submit" class="btn-sm btn-danger ml-2 mt-2 mr-2 mb-1"><a href="{% url 'delete_todo' i.id %}">Delete</a></button>
                                
                            </div>

                            <div class="float-right">

                                <button type="submit" class="btn-sm btn-success ml-2 mt-2 mr-2 mb-1" id="update_btn"><a href="{% url 'update_todo' i.id %}">Update</a></button>

                            </div>

                            <div class="float-right">
                        
                                <button type="submit" class="btn-sm btn-dark ml-2 mt-2 mr-2 mb-1" id="completed_btn"><a href="{% url 'completed_todo' i.id %}">Completed</a></button>

                            </div>              
                                        
                        </li>
                            
                    {% endfor %}

                </ul>
            </div>
        </div>

        <hr style="border-top: 1px solid #999; ">
        <div class="row">
            <div class="col">
                <h4 class="heading" style="text-align: center;">Completed Todo Items</h4>
                <ul class="list-group" id='compItems'>


                    {% for i in page_obj2 %}<hr>

                        <li class="list-group-item list-group-item-primary mb-2" id="upcomingItem">{{ i.title }}

                        <div class="float-right">

                            <button type="submit" class="btn-sm btn-danger ml-2 mt-2 mr-2 mb-1"><a href="{% url 'delete_todo' i.id %}">Delete</a></button>
                                
                        </div>                              

                        <div class="float-right">

                            <button type="submit" class="btn-sm btn-success ml-2 mt-2 mr-2 mb-1" ><a href="{% url 'update_todo' i.id %}">Update</a></button>

                        </div>
                        </li>
                    {% endfor %}

                </ul>
            </div>
        </div>

    </div>

{% endblock %}

起初我在 if 条件下的模板标签中使用了 or ,但我收到了这个错误。当我尝试添加新的待办事项时出现错误消息

Error Message occurs when I try to add new to-do item

我在模板标签中尝试了 运算符,但我什至没有得到第 2 页的链接,即使我有即将到来的项目并且没有额外的已完成项目。

解决方法

你的条件应该是分页器条件的析取,所以or而不是and

{% if page_obj.has_previous or page_obj2.has_previous %}
    …
{% endif %}

.has_next 也是如此。然后应该通过检查哪个页面对象具有下一页来处理上一页和下一页,因此:

{% if page_obj.has_next or page_obj2.has_next %}
    <li class="page-item">
        {% if page_obj.has_next %}
            <a class="page-link" href="?page={{ page_obj.next_page_number }}">&raquo;</a>
        {% else %}
<a class="page-link" href="?page={{ page_obj2.next_page_number }}">&raquo;</a>
        {% endif %}
    </li>
{% endif %}

话虽如此,我不确定这是否能提供最佳的用户体验。也许最好制作两个单独的分页(所以使用 ?pagedone=…&pagetodo=…)。

,

使用 {{ page_obj.number }} 运算符作为 @Willem 指出。并且您活动链接 href 必须是 {{ page_obj.page_number }} 而不是 <li class="page-item active"> <a class="page-link" href="?page={{ page_obj.number }}">{{ page_obj.number }}</a> </li>

EmptyPage

正如您在模板中的第 18 行

中所看到的错误 dataframe %>% select_if(function(x) all(is.na(x))) %>% colnames()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?