如何在Django中创建分页?

如何在Django中创建分页?,django,pagination,Django,Pagination,我遵循djangoproject.com的以下文档:。但这太简单了。这只是下一个和上一个按钮 {% if hire_article_s.has_previous %} <a href="?page={{ hire_article_s.previous_page_number }}">previous</a> {% endif %} &l

我遵循djangoproject.com的以下文档:。但这太简单了。这只是下一个和上一个按钮

                {% if hire_article_s.has_previous %}
                    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                    Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                </span>

                {% if hire_article_s.has_next %}
                    <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                {% endif %}

        </span>
</div>
现在我想创建具有更多功能的分页,例如

                {% if hire_article_s.has_previous %}
                    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                    Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                </span>

                {% if hire_article_s.has_next %}
                    <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                {% endif %}

        </span>
</div>
这是代码:

                {% if hire_article_s.has_previous %}
                    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                    Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                </span>

                {% if hire_article_s.has_next %}
                    <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                {% endif %}

        </span>
</div>
View.py

def hire(request):

hire_article_list = hire_article.objects.all().order_by('-id')
#hire_article_list = hire_article.objects.order_by("-publication_date")

paginator = Paginator(hire_article_list, 2) # Show 25 contacts per page

page = request.GET.get('page')
try:
    hire_article_s = paginator.page(page)

except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    hire_article_s = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.

    hire_article_s = paginator.page(paginator.num_pages)

#return render_to_response('hire/list.html', {"page_list": page_list})
context = {'hire_article_s': hire_article_s}
return render(request, 'hire/list.html', context)
                {% if hire_article_s.has_previous %}
                    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                    Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                </span>

                {% if hire_article_s.has_next %}
                    <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                {% endif %}

        </span>
</div>
list.html

{% for j in hire_article_s %}
    {# Each "j" is a page_list  model object. #}
    <li><a href="/hire/{{ j.slug }}-{{j.id}}">{{ j.hiring}}</a></li>
{% endfor %}
                {% if hire_article_s.has_previous %}
                    <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                    Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                </span>

                {% if hire_article_s.has_next %}
                    <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                {% endif %}

        </span>
</div>
{j在hire\u article\u s%}
{#每个“j”都是一个页面列表模型对象。#
  • {%endfor%}

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    {%if hire\u article\u s.has\u previous%}
    {%endif%}
    第{hire_article_s.number}页,共{{hire_article_s.paginator.num_pages}页。
    {%如果美国有下一篇文章{u%}
    {%endif%}
    
    我上周也有类似的需求,发现这个非常有用的要点()很好用(尽管我不知道为什么在我将请求放入函数参数之前它不起作用)。它是django的Paginator函数的一个子类。您可以将其放入实用程序文件中,并在需要对范围使用Paginate时调用它

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    例如,我在一个名为utils.py的文件中有我的,它在我的核心应用程序中

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    视图.py

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    from core.utils import paginate
    
    def hire(request):
    
        hire_article_list = hire_article.objects.all().order_by('-id')
        '''
        Show 25 contacts per page, with a page range of 5, which means if you are
        on page 8, it shows links to pages 6,7,8,9,10.
        '''
        hire_article_s = paginate(request, hire_article_list, 25, 5) 
    
        context = {'hire_article_s': hire_article_s}
        return render(request, 'hire/list.html', context)
    
    list.html

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    {% if hire_article_s.has_previous %}
         <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
    {% endif %}
    
    {% for range in hire_article_s.neighbor_range %}
        {% if range == hire_article_s.number %}
           <li class="pagination__item active ">{{ range }}</li>
        {% else %}
           <li class="{% if range == hire_article_s.number %}active {% endif %}"><a href="?page={{ range }}">{{ range }}</a></li>
        {% endif %}
    {% endfor %} 
    
    {% if hire_article_s.has_next %}
        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
    {% endif %}
    
    {%if hire\u article\u s.has\u previous%}
    {%endif%}
    {租用物品的范围为%u美国邻居的范围为%u}
    {%if range==hire\u article\u.number%}
    
  • {{range}
  • {%else%}
  • {%endif%} {%endfor%} {%如果美国有下一篇文章{u%} {%endif%}
    希望这有帮助

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    
    更新

                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>
    

    上面的代码已经编辑了一些。我已经添加了上下文和模板格式。请注意,我正在使用循环遍历
    {{hire\u article\u s.neighbor\u range}
    并打印页码。我还做了一个检查以突出显示当前页面的编号。这应该行得通,因为这几乎是我自己的代码,有你自己的变量名。

    你可以发布你尝试使用更多功能进行分页的代码吗。谢谢你的回复。我补充道,如果这不起作用,我会使用django无止境分页库,但我不想使用djangopackage。只是python代码。对我来说似乎很难找到解决办法谢谢你,但当我努力但没有工作的时候。你能把你的代码发给我吗?@user3863069我已经用一些额外的说明更新了代码。如果这不起作用,你需要告诉我你得到了什么错误。输出看起来像是前一个1 | 2 | 3 | 4 | 5 | 6 | 7当我单击数字时,什么都没有发生\n它正在生成页码,这意味着它可能只是HTML标记中的一个错误。你能发布生成的html吗?
                    {% if hire_article_s.has_previous %}
                        <a href="?page={{ hire_article_s.previous_page_number }}">previous</a>
                    {% endif %}
    
                    <span class="current">
                        Page {{ hire_article_s.number }} of {{ hire_article_s.paginator.num_pages }}.
                    </span>
    
                    {% if hire_article_s.has_next %}
                        <a href="?page={{ hire_article_s.next_page_number }}">next</a>
                    {% endif %}
    
            </span>
    </div>