Ошибка типа Python при настройке нумерации страниц в Django - PullRequest
2 голосов
/ 22 июля 2011

Привет! Я следую официальной документации и настраиваю нумерацию страниц для своего веб-сайта, мой шаблон индекса выглядит следующим образом:

{% for post in list_of_posts %}
<div class="body"><a class="title" href="/post/{{post.id}}"><h2>{{ post.title }}</h2></a>
<P>{{ post.body|truncatewords:50|wordwrap:110 }}</P>    
<h3>{{ post.date|date:"jS F Y" }}</h3>
<hr>
</div>
{% endfor %}
<div class="pagination">
<span class="step-links">
    {% if post.has_previous %}
        <a href="?page={{ post.previous_page_number }}">previous</a>
    {% endif %}

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

        {% if post.has_next %}
        <a href="?page={{ post.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

и мой вид выглядит следующим образом:

# Main page
def index(request):
list_of_posts = Post.objects.all().order_by('-date')
list_of_posts = list_of_posts.filter(published=True)
paginator = Paginator(list_of_posts, 10)
page = request.GET.get('page')
try:
    post = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    post = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    post = paginator.page(paginator.num_pages)

return render_to_response('index.html', {'list_of_posts': list_of_posts})

Я получаю странное ощущение, что TypeError вызван тем, что paginator не выводит никакого значения?Мой откат не слишком полезен, но вот он

Exception Value:    
int() argument must be a string or a number, not 'NoneType'
Exception Location: C:\Python27\lib\site-packages\django\core\paginator.py in        validate_number, line 23
TypeError at /
int() argument must be a string or a number, not 'NoneType'

Любое руководство о том, что может пойти не так, будет с благодарностью.

Ответы [ 3 ]

4 голосов
/ 22 июля 2011

Добавьте TypeError в свой первый улов:

except (PageNotAnInteger, TypeError):
    # ...

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

page = request.GET.get("page", 1)
0 голосов
/ 23 июля 2011

Я добавляю небольшой код для pagination здесь. Надеюсь, это поможет Вам:

def pagination(request, list_of_posts, result_per_page):
    paginator = Paginator(list_of_posts, result_per_page)
    try: // **Most probably here your code is doing somthing wrong**.
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        posts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        posts = paginator.page(paginator.num_pages)

    return posts
0 голосов
/ 22 июля 2011

Тело вашей функции просмотра не имеет отступа.Это просто так на этой странице?

Кроме того, не следует избегать ошибки, но похоже, что вы не отправляете переменную post в шаблон (вместо list_of_posts).

Наконец, у вас есть это в верхней части вашего модуля ...

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...