У меня проблемы с настройкой django-разбивки на страницы

#python #django #pagination #django-pagination

#python #django #разбивка на страницы #django-разбивка на страницы

Вопрос:

Я создаю шаблон для сайта Django (это база данных цитат). Я хочу иметь нумерацию страниц, подобную Digg. Тем не менее, автор приложения создал свою собственную разбивку на страницы, к сожалению, без нумерации страниц (только ссылки «предыдущий» и «следующий»). Итак, я установил django-pagination, но я не могу использовать его с сайтом. Я совершенно новичок в Django, даже в программировании — я всего лишь простой веб-дизайнер… Хорошо, поехали.

Существует оригинальный сценарий: https://bitbucket.org/fleg/fqdb /

Первое, что связано с обработчиками контекста шаблона. Мой settings.py у меня не было этого раздела, поэтому я добавил его точно так же, как в документации по разбивке на страницы django. Когда я запускаю сайт, я получаю сообщение об ошибке: «Поместите’django.contrib.auth.context_processors.auth’ в ваш параметр TEMPLATE_CONTEXT_PROCESSORS, чтобы использовать приложение администратора». Итак, как я должен это заказать?

Вторая проблема — шаблон. Я использую его точно так же, как в скринкасте:

 {% extends "fqdb/base.html" %}
{% load pagination_tags %}

{% block title %}{{ title }}{% endblock %}

{% block content %}
            <h1>{{ title }}</h1>

            {% if quotes %}
            {% autopaginate quotes %}
            {% for quote in quotes %}
                {% include 'fqdb/quote_body.html' %}
            {% endfor %}
            {% paginate %}
            {% else %}
                <p>Brak cytatów.</p>
            {% endif %}
{% endblock %}
  

Но я получаю «Ошибка шаблона: ошибка ключа при рендеринге: запрос». Но… Серьезно, я не знаю, что не так с этим кодом!

Существует разбитое на страницы представление — список цитат. Он работает без разбивки на страницы, поэтому я не думаю, что это проблема, но, возможно.

 def list_paged(request, page, order_by_what, title, reverse_name):
hash = get_ip_hash(request)
lista = Quote.objects.filter(accepted = True).order_by(order_by_what)[:]
    returnDict = {'quotes': lista, 'title': title, 'hash': hash, 'sidebar': get_sidebar()}
    return render_to_response('fqdb/quote_list.html', {'quotes': get_quotes(quotes)},     context_instance=RequestContext(request))
  

Я изменил его, чтобы не разбивать на страницы, потому что это задача django-pagination. Вы можете найти исходное представление на Bitbucket.

Может быть, вы знаете какие-нибудь лучшие решения для разбивки на страницы?

Комментарии:

1. можете ли вы опубликовать представление, которое отображает этот шаблон?

2. Если вы хотите иметь разбивку на страницы в стиле digg, возможно, стоит попробовать django-endless-pagination !

Ответ №1:

Похоже, вам нужно добавить django.contrib.auth.context_processors.auth и django.core.context_processors.request контекстные процессоры к вашим TEMPLATE_CONTEXT_PROCESSORS настройкам.

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

KeyError Мне кажется, что вам требуется request процессор.

Попробуйте выполнить следующее в вашем файле настроек:

 TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    #"django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    #"django.core.context_processors.static",
    #"django.contrib.messages.context_processors.messages")
    "django.core.context_processors.request"
    )
  

Я использовал список по умолчанию, приведенный в документах контекста запроса Django 1.3, добавил обработчик запросов и прокомментировал те, которые вам, похоже, не нужны.

Порядок обработчиков контекста шаблона обычно не имеет значения, если они не определяют перекрывающиеся имена переменных.

Комментарии:

1. Чувак, ты тоже только что решил мою проблему! Слава человеку! 1!!! Я застрял на этом в течение часа. Кстати, хотя разбивка на страницы работает, но нет кнопки next или previous?

2. Я рад, что ответ помог, но ему уже пару лет. Вам лучше задать новый вопрос о предыдущей и следующей кнопках.

Ответ №2:

Если объекты передаются из templatetag

 def comment_app(context):
    objects = Comments.objects.get_tree_for_object(context['content_object'])
    return {
        'comments_tree': objects,
        'request': context['request']
}
register.inclusion_tag('comments/comment_app.html', takes_context=True)(comment_app)
  

обратите внимание на: ‘request’: context[‘запрос’]

Ответ №3:

 {% autopaginate quotes N%}
  

N — сколько элементов вам нужно для каждой страницы