2017-04-13 29 views
0

はここに私のコードです(それが正常に動作します):(index.htmlをすることによって拡張される)index.htmlにページングを追加するにはどうすればよいですか?

#views.py 
class IndexView(generic.ListView): 
    template_name = 'index.html' 
    context_object_name = 'home_list' 
    queryset = Song.objects.all() 
    paginate_by = 1 
    def get_context_data(self, **kwargs): 
     context = super(IndexView, self).get_context_data(**kwargs) 
     context['all_artists']=Artist.objects.all() 
     context['all_songs']=Song.objects.all() 
     context['all_albums']=Album.objects.all() 
     return context 

base.htmlを:

#base.html 
{% block content %}{% endblock %} 
{% block pagination %} 
      {% if is_paginated %} 
      <div class="pagination"> 
       <span class="page-links"> 
       {% if page_obj.has_previous %} 
        <a href="{{ request.path }}?page={{ page_obj.previous_page_number}}">Previous</a> 
       {% endif %} 
       <span class="page-current"> 
        Page {{page_obj.number}} of {{page_obj.paginator.num_pages }} 
       </span> 
       {% if page_obj.has_next %} 
        <a href="{{ request.path }}?page={{page_obj.next_page_number}}">Next</a> 
       {% endif %} 
       </span> 
      </div> 
      {% endif %} 
      {% endblock %} 

そして、私のindex.html:

{% extends 'base_generic.html' %} 
{% block title %}<title>Listen to songs </title>{% endblock %} 
{% block content %} 
<h3>Best Songs</h3> 

{% for song in all_songs %} 
<ol> 
    <li><a href="{% url 'music:song_detail' song.id %}">{{song.song_title}}</a> <img src="{{song.song_logo}}" heigt=112, width=114/> <br></li> 

</ol> 
{% endfor %} 
<h3>Best Albums</h3> 
{% for album in all_albums %} 
<ul> 
    <li title="{{album.album_title}}"> 
    <img id="img_{{album.id}}" src="{{album.album_logo}}" heigt=112, width=114 /> 
    <p><a href="{% url 'music:album_detail' album.id %}">{{album.album_title}}</a></p> 

    </li> 

</ul> 
{% endfor %} 


{% endblock %} 

私はこれをコンパイルしたとき、私はこのウィンドウを持っています: Image here しかし、すべてのページで、同じままです。私は1を表示することですページあたりの曲。ヘルプ人! :]:]:]

答えて

0

あなたはall_songsと呼ばれる別のコンテキスト変数を作ったの代わりに、あなたのページ分割オブジェクトを使用することはありません。あなたはそれが複数のリスト

ページの区切り混乱得ることができますが、あまりにもあなたの他のクエリセットのためのページ付けを適用することもできます

{% for song in home_list %} 

でなければなりません

単純に

{% for song in all_songs %} 

右コンテキストデータを使用

+1

を削除することができますありがとう、それは働いた!あなたは素晴らしいです! – blacklight

0

はこちらをご覧:https://www.youtube.com/watch?v=q-Pw7Le30qQ

ビデオは、ページネーションを説明しています。

オルタナティブ:https://docs.djangoproject.com/en/1.10/topics/pagination/

あなただけの項目を1つだけ表示されますDetailViewを、使用するオプションが常にある1曲を表示したい場合。あなたの例ではHow do I use pagination with Django class based generic ListViews?

:ここ

は、クラスベースのビューのためのプロセスを説明しstackoverflowの質問ですあなたはクエリセットを設定する必要はありません。 queryset = ###を削除し、model =#YOURMODELNAME#を追加してください。

クエリーセットを上書きするには、ListViewの関数であるget_queryset()でそれを行う必要があります。このように:

class SongView(ListView): 
    model = Song 
    template_name = 'template_name' 

    def get_queryset(): 
     queryset = super(SongView, self).get_queryset(**kwargs) 
     queryset = #aditional filters, ordering, whatever# 
     return queryset 
+0

実際に私はページあたり4曲を表示したい、テスト目的のために1ページに1曲を作った。私は合計3曲を持っている。 私はそのページを読んだが、それでも私のコードは正しく動作していない(私はコードが動作しているが、ページに3曲を表示している)。 – blacklight

+0

インデックスビュー:クエリーセットを上書きします。これにより、常に完全な曲リストがテンプレートに送信されます。クラスベースのビューでは、model =#YOURMODELHERE#でモデルを設定する必要があります。その後、クエリーセット= ### – Harper

関連する問題