Python 分页未在ListView中显示页码

Python 分页未在ListView中显示页码,python,django,Python,Django,我能够在基于函数的视图中使分页工作正常,但是现在我将所有内容重新分解到基于类的视图中,现在分页编号没有显示出来 视图.py from django.shortcuts import render, get_object_or_404 from django.views import generic from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolve

我能够在基于函数的视图中使分页工作正常,但是现在我将所有内容重新分解到基于类的视图中,现在分页编号没有显示出来

视图.py

from django.shortcuts import render, get_object_or_404
from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

from .forms import ProfileForm
from .models import EmployeeProfiles


class IndexView(generic.ListView):
    template_name = 'ppm/ppm.html'
    paginate_by = 5  # Show 5 profiles per page

    def get(self, request):
        profiles_set = EmployeeProfiles.objects.all()
        paginator = Paginator(profiles_set, self.paginate_by) 
        page = request.GET.get('page')
        try:
            profiles = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            profiles = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            profiles = paginator.page(paginator.num_pages)

        context = {
            'profiles_set': profiles_set,
            'title': 'Employee Profiles'
         }

    return render(request, self.template_name, context)
class IndexView(ListView):
    model = EmployeeProfiles
    paginate_by = 5
    template_name = 'ppm/ppm.html'
ppm.html

<div class="pagination">
    <span class="step-links">
        {% if profiles_set.has_previous %}
            <a href="?page={{ profiles_set.previous_page_number }}">previous</a>
        {% endif %}

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

        {% if profiles_set.has_next %}
            <a href="?page={{ profiles_set.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>
<table>
{% for profile in object_list %}
<tr>
    <td>{{ profile.name }}</td>
</tr>
{% endfor %}
</table>

<p>
{% if is_paginated %}
<nav>
    <ul class="pagination">
    {% if page_obj.has_previous %}
        <li>
        <a href="?page={{ page_obj.previous_page_number }}">
            <span>Previous</span>
        </a>
        </li>
    {% else %}
        <li class="disabled">
        <a href="#">
            <span>Previous</span>
        </a>
        </li>
    {% endif %}

    {% for page in paginator.page_range %}
        <li {% if page == page_obj.number %}class="active"{% endif %}>
        <a href="?page={{ page }}">{{ page }}</a>
        </li>
    {% endfor %}

    {% if page_obj.has_next %}
        <li>
        <a href="?page={{ page_obj.next_page_number }}">
            <span>Next</span>
        </a>
        </li>
    {% else %}
        <li {% if not page_obj.has_next %}class="disabled"{% endif %}>
        <a href="#">
            <span>Next</span>
        </a>
        </li>
    {% endif %}
    </ul>
</nav>
{% endif %}
</p>

{%if profiles_set.has_previous%}
{%endif%}
第{{profiles_set.paginator.num_pages}页中的第{{profiles_set.number}页。
{%if profiles_set.has_next%}
{%endif%}
输出:“第页,共页。”


我已经研究过类似问题的解决方案,并尝试过,但仍然无法找到解决方案。你知道我做错了什么吗?

首先,你不需要覆盖
get
。您的代码对于默认实现来说足够简单

视图.py

from django.shortcuts import render, get_object_or_404
from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

from .forms import ProfileForm
from .models import EmployeeProfiles


class IndexView(generic.ListView):
    template_name = 'ppm/ppm.html'
    paginate_by = 5  # Show 5 profiles per page

    def get(self, request):
        profiles_set = EmployeeProfiles.objects.all()
        paginator = Paginator(profiles_set, self.paginate_by) 
        page = request.GET.get('page')
        try:
            profiles = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            profiles = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            profiles = paginator.page(paginator.num_pages)

        context = {
            'profiles_set': profiles_set,
            'title': 'Employee Profiles'
         }

    return render(request, self.template_name, context)
class IndexView(ListView):
    model = EmployeeProfiles
    paginate_by = 5
    template_name = 'ppm/ppm.html'
其次,在模板中使用CBW提供的分页

ppm.html

<div class="pagination">
    <span class="step-links">
        {% if profiles_set.has_previous %}
            <a href="?page={{ profiles_set.previous_page_number }}">previous</a>
        {% endif %}

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

        {% if profiles_set.has_next %}
            <a href="?page={{ profiles_set.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>
<table>
{% for profile in object_list %}
<tr>
    <td>{{ profile.name }}</td>
</tr>
{% endfor %}
</table>

<p>
{% if is_paginated %}
<nav>
    <ul class="pagination">
    {% if page_obj.has_previous %}
        <li>
        <a href="?page={{ page_obj.previous_page_number }}">
            <span>Previous</span>
        </a>
        </li>
    {% else %}
        <li class="disabled">
        <a href="#">
            <span>Previous</span>
        </a>
        </li>
    {% endif %}

    {% for page in paginator.page_range %}
        <li {% if page == page_obj.number %}class="active"{% endif %}>
        <a href="?page={{ page }}">{{ page }}</a>
        </li>
    {% endfor %}

    {% if page_obj.has_next %}
        <li>
        <a href="?page={{ page_obj.next_page_number }}">
            <span>Next</span>
        </a>
        </li>
    {% else %}
        <li {% if not page_obj.has_next %}class="disabled"{% endif %}>
        <a href="#">
            <span>Next</span>
        </a>
        </li>
    {% endif %}
    </ul>
</nav>
{% endif %}
</p>

{对象_列表%中的配置文件为%0}
{{profile.name}
{%endfor%}

{%if已分页%}
    {%如果页面_obj.has_previous%}
  • {%else%}
  • {%endif%} {paginator.page_range%} {%endfor%} {%如果页面_obj.has_next%}
  • {%else%} {%endif%}
{%endif%}


还有一点建议:最好使用单数作为模型名称。

所以我根本不需要get方法?我只需要你在views.py中演示的3行代码?我试过了,但还是不行。是的,你只需要那三条线。你是否更改了ppm.html?我确实更改了ppm.html,但当我刚刚添加了这3行并删除了所有其他内容时,表格就消失了。好的,现在分页按钮正在工作,但表格没有显示页面对象-它是一个分页器,对象列表-模型列表。我的意思是“员工档案”而不是“员工档案”。