Django中设置分页时的Python类型错误
你好,我正在按照官方文档为我的网站设置分页功能,我的索引模板是这样的:
{% 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})
我觉得这个类型错误可能是因为分页器没有输出任何值?我的错误追踪信息不是很有帮助,但我还是把它放在这里:
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'
如果能给我一些关于可能出错的地方的建议,我会非常感激。
4 个回答
0
我在这里添加了一段关于分页
的小代码,希望对你有帮助:
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
你的视图函数的主体部分没有缩进。这是页面显示的问题吗?
另外,这样做应该不会解决错误,但看起来你没有把帖子变量传递给模板(而是用的 list_of_posts)。
最后,你的模块顶部有这个吗 ...
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
4
在你的第一个捕获(catch)中添加类型错误(TypeError):
except (PageNotAnInteger, TypeError):
# ...
但是如果你这样获取页面编号,就可以避免这个错误:
page = request.GET.get("page", 1)