2017-12-27 17 views
2

Ich habe fast alle Thread zu einer ähnlichen Fehlermeldung gelesen und keine von ihnen bot eine Lösung für mein Problem. Ich eine Geschichte und für jede Geschichte gibt es Kapitel. Die Idee ist, dass es ein Kapitel pro Seite geben wird, aber ich bekomme die gleiche Fehlermeldung "EmptyPage at/story/1/page/1 /", wenn ich die Paginierung versuche.Diese Seitenzahl ist kleiner als 1 Django

Ich habe mehrere Kapitel für jede Geschichte und ich noch Seitenzahl kleiner als 1 ist

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) 

erhalten urls.py

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

und schließlich die Vorlage

<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

Ihre Vorlage die Seitennummer als Abfrageparameter ist vorbei, aber Ihre URL und Sicht erwarten sie in der URL selbst. –

+0

und wie man das bitte reparieren? –

+0

Seien Sie konsistent? –

Antwort

0

Das Problem, das Sie liegt in der beide {%else%} konfrontiert sind s Sie in der Paginierung tun.

 {% 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%} 

Wenn django versucht, Ihre Seite zu machen und es ist page = 1 die erste else Aussage erreicht es die Seite finden wird eine 0 sein, die nicht korrekt ist, die gleiche Sache für sein wird, wenn sie nicht über ein nächste Seite bei der else für die nächste Anweisung. Als Lösung sollte es so sein:

{% 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%} 
Verwandte Themen