2017-12-27 19 views
2

私はほとんどすべてのスレッドを同様のエラーメッセージに関連して読みましたが、どれも私の問題の解決策を提示しませんでした。 私は物語であり、各物語には章があります。考え方はページごとに章がありますが、私はページ付けをしようとすると、同じエラーメッセージ "EmptyPage at/story/1/page/1 /"を得ています。そのページ番号が1未満です。Django

私はそれぞれの物語のために複数の章を持っていると私はまだ、ページ番号が取得1未満

views.py

def post(request, id_story, page=1): 
    story = Story.objects.get(id=id_story) 
    chapters = story.chapter_set.all() 
    paginator = Paginator(chapters, 1) 
    try: 
     chapters = paginator.page(page) 
    except PageNotAnInteger: 
     chapters = paginator.page(1) 
    except EmptyPage: 
     chapters = paginator.page(paginator.num_pages) 
    return render(request, 'single.html', {'story': story, 'chapters': chapters}) 

models.py

class Story(models.Model): 
    Lang =(
     ('LA', '-LANGUAGE-'), 
     ('Ar', 'ARABIC'), 
     ('Ot', 'OTHER') 
    ) 
    title = models.CharField(max_length=250, null=False) 
    author = models.ForeignKey(User, on_delete=models.CASCADE) 
    summary = models.TextField(max_length=1000, null= False) 
    pub_date = models.DateField(auto_now_add=True, blank=False, null=False) 
    update_time = models.DateField(null=True) 
    has_chapter = models.BooleanField(default=False, editable=False) 
    lang = models.CharField(choices=Lang, default=Lang[0], max_length=3) 
    story_cover = models.FileField() 

    def __str__(self): 
     return self.title + " - " + self.author.username 


class Chapter(models.Model): 
    story = models.ForeignKey(Story, on_delete=models.CASCADE) 
    chapter_number = models.IntegerField(editable=False, default=1) 
    title = models.CharField(max_length=250, null=True) 
    chapter = models.TextField() 

    def save(self, *args, **kwargs): 
     number = Chapter.objects.filter(story=self.story).count() 
     self.chapter_number = number + 1 
     story = self.story 
     if not story.has_chapter: 
      story.has_chapter = True 
      story.save() 
     super(Chapter, self).save(*args,**kwargs) 

urls.py

url(r'^story/(?P<id_story>[0-9]+)/page/(?P<page>[0-9]+)/$', views.post, name="post"), 

し、最終的にテンプレート

<span class="image featured"><img src="{% static 'images/yogo.jpg'%}" alt=""/></span> 
     {% for chapter in chapters %} 
       {% autoescape off%} 
           <h6>{{chapter.title}}</h6> 
           {{chapter.chapter}} 
           {% endautoescape %} 
        {% endfor %} 
     <footer> 
      <ul class="stats"> 
       <li><a href="#" class="icon fa-heart">28</a></li> 
       <li><a href="#" class="icon fa-comment">128</a></li> 
      </ul> 
     </footer> 
     {% if chapters.has_other_pages %} 
     <ul class="actions pagination"> 
      {% if chapters.has_previous %} 
      <li><a href="?page={{ chapters.previous_page_number }}" class=" button big previous">Previous Page</a></li> 
      {% else %} 
      <li><a href="?page={{ chapters.previous_page_number }}" class="disabled button big previous">Previous Page</a></li> 
      {%endif%} 
      {% if chapters.has_next %} 
      <li><a href="?page={{ chapters.next_page_number }}" class="button big next">Next Page</a></li> 
      {%else%} 
      <li><a href="?page={{ chapters.next_page_number }}" class="button big next">Next Page</a></li> 
      {%endif%} 

     </ul> 
     {%endif%} 
+0

あなたのテンプレートは、クエリパラメータとしてページ番号を渡しているが、あなたのURLおよびビューは、URL自体にそれを期待しています。 –

+0

とその修正方法を教えてください。 –

+0

一貫性がありますか? –

答えて

0

あなたはページネーションでやっているの両方{%else%}秒で嘘を直面している問題。 Djangoはあなたのページをレンダリングしようとすると、それはそれは、そのページが正しくない0になります見つける最初elseの文に到達しpage = 1だとき、それは持っていないとき、同じことをするためになります

 {% if chapters.has_previous %} 
      <li><a href="?page={{ chapters.previous_page_number }}" class=" button big previous">Previous Page</a></li> 
     {% else %} 
      <li><a href="?page={{ chapters.previous_page_number }}" class="disabled button big previous">Previous Page</a></li> 
     {%endif%} 
     {% if chapters.has_next %} 
      <li><a href="?page={{ chapters.next_page_number }}" class="button big next">Next Page</a></li> 
     {%else%} 
      <li><a href="?page={{ chapters.next_page_number }}" class="button big next">Next Page</a></li> 
     {%endif%} 

次の命令のためにelseの次のページ。 解決策として、それは次のようにする必要があります:

{% if chapters.has_previous %} 
      <li><a href="?page={{ chapters.previous_page_number }}" class=" button big previous">Previous Page</a></li> 
     {% else %} 
      <li><a href="#" class="disabled button big previous">Previous Page</a></li> 
     {%endif%} 
     {% if chapters.has_next %} 
      <li><a href="?page={{ chapters.next_page_number }}" class="button big next">Next Page</a></li> 
     {%else%} 
      <li><a href="#" class="button big next">Next Page</a></li> 
     {%endif%}