简体   繁体   English

Django 中的分页无法按预期工作

[英]Pagination in Django not working as expected

I wanted pagination for all the courses available and that was easy to achieve.我想要所有可用课程的分页,这很容易实现。 But now I'm stuck because I wanted pagination for faculties also, which will show specific courses of the accessed faculty.但是现在我被卡住了,因为我还想要为教师分页,这将显示访问教师的特定课程。 I have 4 models: faculties, departments, studies, and courses.我有 4 个模型:院系、系、研究和课程。 The pagination will show for faculties as well, but the problem is that if I try to go to the second page, it will redirect me to the second page of all courses list.分页也会显示给院系,但问题是如果我尝试转到第二页,它会将我重定向到所有课程列表的第二页。 Or, if I change page on all courses and then try to access a faculty, no course will show at all in the faculty.或者,如果我更改所有课程的页面,然后尝试访问某个教员,则该教员中根本不会显示任何课程。

def index(request):
    course_list = Course.objects.all()
    page = request.GET.get('page', 1)
    paginator = Paginator(course_list, 1)
    try:
        courses = paginator.page(page)
    except PageNotAnInteger:
        courses = paginator.page(1)
    except EmptyPage:
        courses = paginator.page(paginator.num_pages)
    faculty_list = Faculty.objects.all()
    page = request.GET.get('page2', 1)
    paginator = Paginator(faculty_list, 1)
    try:
        faculties = paginator.page(page)
    except PageNotAnInteger:
        faculties = paginator.page(1)
    except EmptyPage:
        faculties = paginator.page(paginator.num_pages)
    context = {'courses': courses,
               'faculties': faculties,
               'departments': Department.objects.all(),
               'studies': StudyProgramme.objects.all(),
               'teachers': Teacher.objects.all()
               }
    return render(request, 'courses/index.html', context)

 <div id="crs"> <h3>All courses</h3> <ul> {% for course in courses %} <li><a href={{ course.slug }}>{{ course.name }}</a></li> {% endfor %} </ul> <div class="pagination"> <span class="step-links"> {% if courses.has_previous %} <a href="?page=1">&laquo; first</a> <a href="?page={{ courses.previous_page_number }}">{{ courses.previous_page_number }}</a> {% endif %} <span class="current"> Page {{ courses.number }} of {{ courses.paginator.num_pages }} </span> {% if courses.has_next %} <a href="?page={{ courses.next_page_number }}">{{ courses.next_page_number }}</a> <a href="?page={{ courses.paginator.num_pages }}">last &raquo;</a> {% endif %} </span> </div> </div> {% for faculty in faculties %} <div id="fac_{{ faculty.pk }}_tab" style="display:none;"> <h3> {{ faculty.name }} Courses</h3> <ul> {% for department in faculty.department_set.all %} {% for study in studies %} {% if study.department == department %} {% for course in courses %} {% if course.study_programme == study %} <li> <a class="first" href={{ course.slug }}>{{ course.name }}</a> </li> {% endif %} {% endfor %} {% endif %} {% endfor %} {% endfor %} </ul> <div class="pagination"> <span class="step-links"> {% if faculties.has_previous %} <a href="?page2=1">&laquo; first</a> <a href="?page2={{ faculties.previous_page_number }}">{{ faculties.previous_page_number }}</a> {% endif %} <span class="current"> Page {{ faculties.number }} of {{ faculties.paginator.num_pages }} </span> {% if faculties.has_next %} <a href="?page2={{ faculties.next_page_number }}">{{ faculties.next_page_number }}</a> <a href="?page2={{ faculties.paginator.num_pages }}">last &raquo;</a> {% endif %} </span> </div> </div> {% endfor %}

It's not a Django problem that your view is most certainly handle one pagination parameter page which will direct to courses, so if you changed the get parameter for each of your model pagination it will work.您的视图肯定会处理一个分页参数page ,该page将定向到课程,这不是 Django 问题,因此,如果您更改了每个模型分页的 get 参数,它将起作用。

ex:例如:

## views.py
page = request.GET.get('page')
## yourtemplate.html
<a href="?page={{ yourcontext }}">yourtext</a>
localhost:8000/MYVIEW/?page=2  # Goes to courses

## views.py    
page = request.GET.get('faculties')
## yourtemplate.html
<a href="?faculties={{ yourcontext }}">yourtext</a>
##
localhost:8000/MYVIEW/?faculties=2 # Goes to faculties

etc..等..

edited:编辑:

{% for faculty in faculties %} change it to {% for faculty in faculties2 %} and remove faculties from your context, cuz you are repeating yourself as faculties2 and faculties hold the same queryset . {% for Faculties %} 将其更改为 {% for Faculties2 %} 并从您的上下文中删除 Faculties,因为您正在重复自己,因为 Faculties2 和 Faculties 持有相同的查询集。

paginator = Paginator(course_list, 1)

paginator = Paginator(faculty_list, 1)

将您的第二个实例名称更改为paginator_two将解决您的问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM