Как использовать нумерацию страниц с Django 1.3?
В документации не очень ясно об этом.
Что идет к моему
views.py
?Что входит в мой шаблон?
Что входит в мой файл URLconf?
Я думаю, что вы запрашиваете информацию об использовании разбиения на страницы с новыми представлениями на основе классов, поскольку с традиционными представлениями на основе функций их легко найти. Я обнаружил, что достаточно просто установить paginate_by
переменную, чтобы активировать нумерацию страниц. См. В основанных на классе универсальных представлениях .
Например, в вашем views.py
:
import models
from django.views.generic import ListView
class CarListView(ListView):
model = models.Car # shorthand for setting queryset = models.Car.objects.all()
template_name = 'app/car_list.html' # optional (the default is app_name/modelNameInLowerCase_list.html; which will look into your templates folder for that path and file)
context_object_name = "car_list" #default is object_list as well as model's_verbose_name_list and/or model's_verbose_name_plural_list, if defined in the model's inner Meta class
paginate_by = 10 #and that's it !!
В шаблоне ( car_list.html
), вы можете включить раздел постраничного как это ( у нас есть некоторые контекстные переменные доступны: is_paginated
, page_obj
, и paginator
).
{# .... **Normal content list, maybe a table** .... #}
{% if car_list %}
<table id="cars">
{% for car in car_list %}
<tr>
<td>{{ car.model }}</td>
<td>{{ car.year }}</td>
<td><a href="/car/{{ car.id }}/" class="see_detail">detail</a></td>
</tr>
{% endfor %}
</table>
{# .... **Now the pagination section** .... #}
{% if is_paginated %}
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="/cars?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="/cars?page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
{% endif %}
{% else %}
<h3>My Cars</h3>
<p>No cars found!!! :(</p>
{% endif %}
{# .... **More content, footer, etc.** .... #}
Страница для отображения указывается параметром GET, просто добавляя ?page=n
, к URL.
предположим, у меня есть класс в app / models.py с именем
FileExam(models.Model)
:Приложение / models.py
Приложение / views.py
Только небольшое изменение в
get_context_data
и добавил код пагинации из документации Django здесьприложение / шаблоны / приложение / exam_list.html
обычный список содержимого
раздел страницы
Приложение / urls.py
источник
context = super(SoalListView, self)...
. Возможно , вы имели в виду:context = super(FileExamListView, self)...
?У нас есть 2 способа сделать это.
Первый прост и просто установите поле класса
paginate_by
. Мы ничего не должны делать сget_context_data
методом.Второй метод немного сложен, но мы можем лучше понять нумерацию страниц и настроить сложную нумерацию страниц или несколько страниц. Давай увидим это.
Это можно сделать в три этапа.
1. Override
get_context_data
метод вашегоView
.Передайте
page_keys
иpages
так, чтобы мы могли перебирать списки и избегать жесткого кодирования.2. Настройте свой саб
template
.Мы определяем некоторые переменные, чтобы можно было перебирать список нумерации страниц.
pagination.html
3. Настроить внешний
template
.index.html
источник