Разбиение на страницы Django и “текущая страница”

Ссылки на самом деле "закрыты" заголовком. Вы можете использовать CSS-свойство pointer-events: none, чтобы пройти через это. Здесь ответили здесь.

13
задан Ivan Kharlamov 5 November 2011 в 00:20
поделиться

2 ответа

Хмм ... Я вижу из вашего комментария, что вы не хотите использовать параметр ol 'GET, который это то, что django.core.paginator было написано для использования. Чтобы сделать то, что вы хотите, я не могу придумать лучшего способа, чем предварительно вычислить страницу, на которой находится каждый вопрос. Например, ваш вид в конечном итоге будет выглядеть примерно так:

ITEMS_PER_PAGE = 20
def show_question(question_pk):
    questions = Question.objects.all()
    for index, question in enumerate(questions):
        question.page = ((index - 1) / ITEMS_PER_PAGE) + 1
    paginator = Paginator(questions, ITEMS_PER_PAGE)
    page = paginator.page(questions.get(pk=question_pk).page)
    return render_to_response('show_question.html', { 'page' : page })

Чтобы выделить текущую страницу в шаблоне, вы должны сделать что-то вроде

{% for i in page.paginator.page_range %}
    {% ifequal i page.number %}
        <!-- Do something special for this page -->
    {% else %}
        <!-- All the other pages -->
    {% endifequal %}
{% endfor %}

. Что касается элементов, у вас будет два разных object_lists для работы. ..

page.object_list

будет объектами на текущей странице, а

page.paginator.object_list

будет всеми объектами, независимо от страницы. Каждый из этих элементов будет иметь переменную «page», которая сообщит вам, на какой странице они находятся.

Все это говорит о том, что вы делаете, звучит нетрадиционно. Вы можете переосмыслить, но в любом случае, удачи.

10
ответ дан 1 December 2019 в 21:38
поделиться

django-pagination должен делать то, что вы хотите, и поставляется в красивой упаковке, которую можно просто подключить и использовать. По сути, он перемещает код из ваших представлений в шаблоны и промежуточное программное обеспечение.

РЕДАКТИРОВАТЬ: Я только что видел ваше редактирование. Вы можете получить текущие объекты на странице, используя {% autopaginate object_list%} , который заменяет object_list текущими объектами для любой данной страницы. Вы можете выполнить итерацию по нему, и если вы хотите первое, вы сможете обработать его как список и выполнить object_list [0] .

Если вы хотите сохранить это в своих представлениях, вы можете сделайте что-то вроде этого:

def show_question(question_pk):
    questions = Question.objects.all()
    paginator = Paginator(questions, 20)
    return render_to_response('show_question.html', { 'page' : paginator })

В своем шаблоне вы можете получить доступ к текущей странице, выполнив:

# Gives you the starting index for that page.
# For example, 5 objects, and you're on the second page. 
# start_index will be 3.
page.start_index

# You can access the current page number with:
# 1-based index
page.number

С этим вы сможете делать все, что вам нужно. Здесь есть пара хороших примеров .

5
ответ дан 1 December 2019 в 21:38
поделиться