【问题标题】:Next page button not working same page is reloading下一页按钮不起作用同一页面正在重新加载
【发布时间】:2018-10-09 10:55:47
【问题描述】:

我的数据库中有 6 个帖子,我想每页显示 3 个帖子。一切正常,没有任何错误,但是当我单击“下一页”链接时,正在重新加载相同的帖子。步骤如下,

http://127.0.0.1:8000/blog/

加载成功,页面中有 3 个帖子。此外,“下一页”链接也按预期位于页面底部。

当我点击下一页时,URL 变为:

http://127.0.0.1:8000/blog/?page=2

但正如我所说,首页的帖子正在重新加载。

url.py:

path('',views.getPosts,name="bloghome"),
path('/<int:selected_page>/',views.getPosts,name="bloghome"),

关于分页的view.py函数:

def getPosts(request,selected_page=1):
    posts = Posts.objects.all()
    pages = Paginator(posts,3) #Show 3 post per page
    try:
        returned_page = pages.get_page(selected_page)
    except EmptyPage:
        returned_page = pages.page(pages.num_pages)   
    return render(request,'blog.html',{'page':returned_page,
                                       'posts':returned_page.object_list
                                        })

发布列表页面的模板:

{% extends 'blog_mainpage_assets.html' %}
{%load static%}

    {% block document_body%}
        <div class="container" style="margin-top:40px;">
                {%for post in posts%}
                <div class="post">
                        <div class="baslikveyazi">
                            <div class="baslik_2">
                                <h2><a href="{% url 'post_detail' post.slug %}">{{post.post_title}}</a></h2>
                            </div>
                            <div class="yazi_2">
                                <div style="word-wrap: break-word;"><p style="font-size:20px;line-height:2;">{{post.post_body|truncatechars:100}}</p></div>
                            </div>
                        </div>
                </div>

                {%endfor%}

                {% if page.has_previous %} 
                <a href="{% url 'bloghome' %}?page={{page.previous_page_number}}">Back</a>
                {% endif %}                
                {% if page.has_next %}                
                <a href="{% url 'bloghome' %}?page={{page.next_page_number}}">Next</a>
                {% endif %}


        </div>
    {% endblock document_body%}

【问题讨论】:

    标签: python django url pagination query-parameters


    【解决方案1】:

    您的第二个 URL 采用 /blog/&lt;page&gt;/ 形式,但这不是您在链接中构建的 URL。您的链接看起来像/blog/?page=2。查询参数 (?page=2) 与 URL 路径 (/2/) 完全不同,因此您认为您的 selected_page 永远不会是 1 以外的任何其他内容。

    我会从您的 URL 配置中删除第二个 URL,然后检查视图中的查询参数:

    def getPosts(request):
        posts = Posts.objects.all()
        pages = Paginator(posts, 3) #Show 3 post per page
        selected_page = request.GET.get('page', 1)
        try:
            returned_page = pages.get_page(selected_page)
        except EmptyPage:
            returned_page = pages.page(pages.num_pages) 
    

    【讨论】:

    • 谢谢,成功了!在您回复后我意识到我的问题是多么蹩脚:D 再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多