Кнопка «Следующая страница» не работает, та же страница перезагружается - PullRequest
0 голосов
/ 29 апреля 2018

У меня 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%}

1 Ответ

0 голосов
/ 29 апреля 2018

Ваш второй URL принимает форму /blog/<page>/, но это не тот 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) 
...