【问题标题】:Python Type Error when setting up pagination in Django在 Django 中设置分页时出现 Python 类型错误
【发布时间】:2011-07-26 15:13:01
【问题描述】:

您好,我正在关注官方文档并为我的网站设置分页,我的索引模板如下所示;

{% 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 是因为分页器没有输出任何值?我的回溯不是很有帮助,但在这里

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'

非常感谢任何有关可能出错的指导。

【问题讨论】:

  • 拜托,拜托,请发布完整的回溯。

标签: python django pagination


【解决方案1】:

在你的第一个捕获中添加 TypeError:

except (PageNotAnInteger, TypeError):
    # ...

但如果你会得到这样的页码,你也可以避免这个错误:

page = request.GET.get("page", 1)

【讨论】:

  • 另外,由于某种原因,paginator.num_pages 可能不是一个有效的数字。
  • 耻辱!还没人修这个?花了十分钟来修补! code.djangoproject.com/ticket/18421
  • 好的,如果你点击我的补丁链接,你会看到这已经在 Django 1.4 中修复了。这似乎是 1.3 的问题。
【解决方案2】:

视图函数的主体没有缩进。这就是它出现在此页面上的方式吗?

此外,它不应该避免错误,但看起来您没有将 post 变量发送到模板(而不是 list_of_posts)。

最后,你的模块顶部有这个吗...

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

【讨论】:

    【解决方案3】:

    我在这里为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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2020-05-16
      相关资源
      最近更新 更多