Django 2 - 分页不能正常工作
Django 2 - pagination does not propperly work
首先,感谢您阅读我的问题:)
我目前正在一个小型博客平台上工作,我想为我所有的 Post 元素实现分页。
因此我修改了我的 view.py 和实际的 .html 模板。
现在的问题是,每次我访问 post_list.html 页面并单击下一步时,什么都没有发生。这里怎么回事:
post_list.html
{% extends 'quickblog/base.html' %}
{% block content %}
{% for post in posts %}
<br>
<div class="post">
<h1><u><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></u></h1>
<p>{{ post.text|linebreaksbr }}</p>
<div class="date">
<a>published by: {{ post.author }}</a><br>
<a>published at: {{ post.published_date }}</a><br>
<a>tags: {{ post.tag }}</a>
</div>
</div>
{% endfor %}
<div class="pagination">
<span class="step-left">
{% if posts.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ posts.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
{% if posts.has_next %}
<a href="?page={{ posts.next_page_number }}">Next</a>
<a href="?page={{ posts.paginator.num_pages }}">Last »</a>
{% endif %}
</span>
</div>
{% endblock %}
views.py
def post_list(request):
list_posts = Post.objects.get_queryset().order_by('created_date')
paginator = Paginator(list_posts, 15) # Show 15 Posts per page
page = request.GET.get('posts')
posts = paginator.get_page(page)
return render(request, 'quickblog/post_list.html', {'posts': posts})
在您的模板中,您使用 page
作为查询参数。所以你也应该在视图中使用它。
模板:
<a href="?page={{ posts.next_page_number }}">Next</a>
查看:
page = request.GET.get('page') # not .get('posts')
由于分页适用于有序数据,您需要在查询后附加 order_by 或在模型中使用默认排序,如下面 link
中指定的
希望对您有所帮助。
首先,感谢您阅读我的问题:) 我目前正在一个小型博客平台上工作,我想为我所有的 Post 元素实现分页。 因此我修改了我的 view.py 和实际的 .html 模板。 现在的问题是,每次我访问 post_list.html 页面并单击下一步时,什么都没有发生。这里怎么回事:
post_list.html
{% extends 'quickblog/base.html' %}
{% block content %}
{% for post in posts %}
<br>
<div class="post">
<h1><u><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></u></h1>
<p>{{ post.text|linebreaksbr }}</p>
<div class="date">
<a>published by: {{ post.author }}</a><br>
<a>published at: {{ post.published_date }}</a><br>
<a>tags: {{ post.tag }}</a>
</div>
</div>
{% endfor %}
<div class="pagination">
<span class="step-left">
{% if posts.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ posts.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
{% if posts.has_next %}
<a href="?page={{ posts.next_page_number }}">Next</a>
<a href="?page={{ posts.paginator.num_pages }}">Last »</a>
{% endif %}
</span>
</div>
{% endblock %}
views.py
def post_list(request):
list_posts = Post.objects.get_queryset().order_by('created_date')
paginator = Paginator(list_posts, 15) # Show 15 Posts per page
page = request.GET.get('posts')
posts = paginator.get_page(page)
return render(request, 'quickblog/post_list.html', {'posts': posts})
在您的模板中,您使用 page
作为查询参数。所以你也应该在视图中使用它。
模板:
<a href="?page={{ posts.next_page_number }}">Next</a>
查看:
page = request.GET.get('page') # not .get('posts')
由于分页适用于有序数据,您需要在查询后附加 order_by 或在模型中使用默认排序,如下面 link
中指定的希望对您有所帮助。