2017-08-08 43 views
0

我在我的django博客中顯示最新帖子時遇到問題。我使用了paginator,但現在我無法在每個頁面上獲取最新的帖子。Django的博客如何使用paginator如何顯示每個頁面的最新帖子

views.py

def post_list(request): 
    post_list = Post.objects.all() 
    page = request.GET.get('page') 

    paginator = Paginator(post_list, per_page=3) 
    try: 
     posts = paginator.page(page) 
    except PageNotAnInteger: 
     posts = paginator.page(1) 
    except EmptyPage: 
     posts = paginator(paginator.num_pages) 
    return render(request, 'blog/post_list.html', {'posts': posts,'page': page}) 


def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'blog/post_detail.html', {'post': post}) 

models.py

class Post(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    image = models.FileField(upload_to='images/') 
    created_date = models.DateTimeField(
     default=timezone.now) 
    published_date = models.DateTimeField(
     blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return self.title 

    class Meta: 
     ordering = ('-published_date',) 

forms.py

from django import forms 

from .models import Post 

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = (
      'title', 
      'text', 
      'image', 
      ) 

urls.py

urlpatterns = [ 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
    url(r'^post/(?P<pk>[0-9]+)/edit/$', views.post_edit, name='post_edit'), 
    url(r'^about$', views.about, name='about'), 
    url(r'^projects$', views.projects, name='projects'), 
] 

post_list.html

<div class="widget"> 
    <h3> 
     Latest Posts 
    </h3> 
    <ul class="list-group"> 
     {% for post in posts %} 
     <li class="list-group-item"><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title|truncatewords:5 }}</a></li> 
     {% endfor %} 
    </ul> 
    </div> 
    <div class="widget"> 

現在/?頁= 1只顯示了3個最新的帖子,/?我想頁= 2只顯示了一個最新的帖子(從4個可用) 顯示3個最新的帖子每一頁

回答

0

我就是這麼做的,它的工作原理

views.py

def post_list(request): 
    post_list = Post.objects.all() 
    page = request.GET.get('page') 
    forms = Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')[0:3] 
    paginator = Paginator(post_list, per_page=3) 
    try: 
     posts = paginator.page(page) 
    except PageNotAnInteger: 
     posts = paginator.page(1) 
    except EmptyPage: 
     posts = paginator(paginator.num_pages) 
    return render(request, 'blog/post_list.html', {'posts': posts,'page': page, 'forms': forms,}) 



def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    form = post 
    return render(request, 'blog/post_detail.html', {'post': post, 'form' : form}) 

post_list.html

<div class="widget"> 
    <h3> 
     Latest Posts 
    </h3> 
    <ul class="list-group"> 
     {% for form in forms %} 
     <li class="list-group-item"><a href="{% url 'post_detail' pk=form.pk %}">{{ form.title|truncatewords:5 }}</a></li> 
     {% endfor %} 
    </ul> 
    </div> 
相關問題