我在Django中进行分页时在QuerySet中遇到问题

时间:2020-06-22 04:15:57

标签: python django

我是Django框架的初学者。 queryset在我的帖子列表中运行良好。但是根据博客文章列表中的标签字段,我在分页到第二页 queryset 时遇到问题。当我转到第二页时,它将显示第二页的主列表,而不是queryset页。我不知道背后的问题在哪里...

models.py代码

class Post(models.Model):

TOPICS = (
    ('Programming' , 'Programming'),
    ('C' , 'C'),
    ('C++' , 'C++'),
    ('Java' , 'Java'),
    ('Python' , 'Python'),
)

title = models.CharField(max_length=100, blank=False, null=False)
content = models.TextField()
tag = models.CharField(max_length=50, choices=TOPICS, blank=False, null=False, default='Programming')
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)

def __str__(self):
    return self.title

#redirect to post_detail when some post a blog
def get_absolute_url(self):
    return reverse('post_detail', kwargs={'pk':self.pk})

viwes.py代码

from django.core.paginator import Paginator
from .filters import BlogFilter

def home(request):
    posts = Post.objects.all().order_by('-date_posted')
    postFilter = BlogFilter(request.GET, queryset=posts)
    posts = postFilter.qs
    paginator = Paginator(posts, 3)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    context = {
        'page_obj' : page_obj,
        'postFilter' : postFilter,
    }
    return render(request, 'blog/index.html', context)

模板代码

{% extends 'blog/base.html'%}
{% load crispy_forms_tags %}
{% load static %}
{% block content %}
<section id="article">

  <div class="container">
     <div class="row mt-4">
        <div class="col-md-8 m-auto">
           <form method="get">
             {{postFilter.form|crispy}}
               <button class="btn btn-primary" type="submit">Search</button>
           </form>
    {% for i in page_obj %}

    <article class="media content-section">
      <a href="{% url 'user_posts' i.author.username %}">
        <img class="rounded-circle article-img" src="{{i.author.profile.image.url}}" alt="">
      </a>
      <div class="media-body">
        <div class="article-metadata">
          <a class="mr-2" href="{% url 'user_posts' i.author.username %}">{{ i.author }}</a>
          <small class="text-muted">{{i.date_posted|date:"F d, Y"}}</small>
        </div>
        <h2><a class="article-title" href="{% url 'post_detail' i.id %}">{{i.title}}</a></h2>
        <p class="article-content">{{i.content|linebreaks|truncatewords:50}}</p>
      </div>
    </article>

    {% endfor %}

    {% if page_obj.has_previous %}
    <a class="btn btn-outline-info mb-4" href="?page=1">First</a>
    <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.previous_page_number}}">Previous</a>
    {% endif %}

    {% for num in page_obj.paginator.page_range %}
    {% if page_obj.number == num %}
    <a class="btn btn-info mb-4" href="?page={{ num }}">{{ num }}</a>
    {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
    <a class="btn btn-outline-info mb-4" href="?page={{ num }}">{{ num }}</a>
    {% endif %}
    {% endfor %}

    {% if page_obj.has_next %}
    <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number }}">Next</a>
    <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.paginator.num_pages }}">Last</a>
    {% endif %}
  </div>
  </div>
  </div>
</section>
{% endblock %}

0 个答案:

没有答案