Почему моя страница отображает все записи в блоге даже после применения нумерации страниц - PullRequest
2 голосов
/ 13 апреля 2020

Пожалуйста, помогите здесь.

Я программирую, используя pycharm с django.

Я отображаю записи блога на странице в моем приложении.

Все записи хранятся отображение даже после настройки представлений для отображения 2 записей на странице.

Откуда, по вашему мнению, происходит ошибка?

Я не уверен, что это связано с рендерингом шаблона или это может быть с

paginator logi c?

Views.py - это полный просмотр блога.

def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()
blog_post = Blog_Post_Model.objects.filter(status=1)
blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None

page = request.GET.get('page', 1)
paginator = Paginator(blog_post,2)

try:
    blog_page = paginator.page(page)
except PageNotAnInteger:
    blog_page = paginator.page(1)
except EmptyPage:
    blog_page = paginator.page(paginator.num_pages)

if request.method == 'POST':
    newsletter_form = NewsLetterForm(data=request.POST)
    if newsletter_form.is_valid():
        new_member = newsletter_form.save()
        new_member.save()
    else:
        newsletter_form = NewsLetterForm()

context = {
    'profile': profile,
    'blog_post': blog_post,
    'services': our_services,
    'categories': blog_post_cat,
    'tags': tags,
    'newsletter': newsletter_form,
    'new_member': new_member,
    'blog':blog_page,
    'page':page,
}
return render(request, 'webpages/blog.html', context=context)

Блог. html ( Записи блога) - Здесь я отображал записи блога

<div class="col-lg-8 entries">
            {% for post in blog_post %}
            <article class="entry" data-aos="fade-up">
              <div class="entry-img">
                <img src="{{post.image.url }}" alt="" class="img-fluid">
              </div>

              <h2 class="entry-title">
                <a href="{% url 'webpages:articles_detail' post.pk %}">{{post.title}}</a>
              </h2>

              <div class="entry-meta">
                <ul>
                  <li class="d-flex align-items-center"><i class="icofont-user"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">{{post.author}}</a></li>
                  <li class="d-flex align-items-center"><i class="icofont-wall-clock"></i> <a href="{% url 'webpages:articles_detail' post.pk %}"><time datetime="2020-01-01">{{post.created_on | date:"Y-m-d"}}</time></a></li>
                  <li class="d-flex align-items-center"><i class="icofont-comment"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">12 Comments</a></li>
                </ul>
              </div>

              <div class="entry-content">
                <p>
                  {{post.body | safe | linebreaks | truncatewords:20 }}
                </p>
                <div class="read-more">
                  <a href="{% url 'webpages:articles_detail' post.pk %}">Read More</a>
                </div>
              </div>
            </article><!-- End blog entry -->
          {% endfor %}

Блог. html (Пагинация)

<div class="blog-pagination">
    {% if blog.has_other_pages %}

       <ul class="justify-content-center">
         {% if blog.has_previous %}
            <li><a href="?page={{ blog.previous_page_number }}"><i class="icofont-rounded-left"></i></a></li>
         {% else %}

         <li class="disabled"><i class="icofont-rounded-left"></i></li>
     {% endif %}

     {% for i in blog.paginator.page_range %}
       {% if blog.number == i %}
         <li class="active"><a href="">{{ i }}</a></li>
       {% else %}
       <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
     {% endfor %}

      {% if blog.has_next %}
       <li><a href="?page={{ blog.next_page_number }}"><i class="icofont-rounded-right"></i></a></li></a></li>
      {% else %}
      <li class="disabled"><i class="icofont-rounded-right"></i></a></li></li>
      {% endif %}
   </ul>
 {% endif %}

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Попробуйте:

def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()

blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None
blog_post = Blog_Post_Model.objects.filter(status=1)
paginator = Paginator(blog_post,2)
page = request.GET.get('page', 1)


try:
    blog_page = paginator.get_page(page)
except PageNotAnInteger:
    blog_page = paginator.get_page(1)
except EmptyPage:
    blog_page = paginator.get_page(paginator.num_pages)

if request.method == 'POST':
    newsletter_form = NewsLetterForm(data=request.POST)
    if newsletter_form.is_valid():
        new_member = newsletter_form.save()
        new_member.save()
    else:
        newsletter_form = NewsLetterForm()

context = {
    'profile': profile,
    'blog_post': blog_post,
    'services': our_services,
    'categories': blog_post_cat,
    'tags': tags,
    'newsletter': newsletter_form,
    'new_member': new_member,
    'blog':blog_page,
    'page':page,
}
return render(request, 'webpages/blog.html', context=context)

Шаблон:

{% for post in blog %}
    <!-- … -->
{% endfor %}
0 голосов
/ 13 апреля 2020

blog_post - это все еще ваш набор запросов, содержащий все объекты Blog_Post_Model, вам нужно выполнить итерацию по объекту Page, а не по набору запросов, например:

{% for post in <b>blog</b> %}
    <!-- &hellip; -->
{% endfor %}

вместо:

{% for post in <s>blog_post</s> %}
    <!-- &hellip; -->
{% endfor %}

QuerySet (более или менее) неизменен , поэтому пагинатор не изменяет набор запросов, он создает нумерацию страниц в объекте Page.

...