2017-04-12 3 views
1

このメソッドはビューページにあります。それは正常に動作し、すべてが正しく表示されますが、汎用リストビューに変換して、ページネーションを適用することができます。ここでビューメソッドを汎用リストビューに変換するにはどうすればよいですか?

機能は次のとおりです。 `

#views.py 
def index(request): 
    all_artists = Artist.objects.all() 
    all_songs = Song.objects.all() 
    all_albums = Album.objects.all() 

    return render(request, 'index.html', {'all_albums':all_albums,'all_songs':all_songs, 'all_artists':all_artists}) 

は、だから私はいくつかのチュートリアルに続き、これで終わった:私はページをレンダリングするときには、エラーなしでコンパイルされますが

#new views.py 
class IndexView(ListView): 
    template_name = 'index.html' 
    context_object_name = 'home_list' 
    queryset = Artist.objects.all() 

    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() 

、コンテキストオブジェクトはレンダリングされません。 お手数をおかけしております。 ありがとう

EDIT(13-APR-17): ありがとうございます!それは最終的にいくつかの小さな変更を加えて機能しました。

class IndexView(generic.ListView): 
    template_name = 'index.html' 
    context_object_name = 'home_list' 
    queryset = Artist.objects.all() 

    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 
    enter code here 
    enter code here 
+0

する必要はありません改ページを使用するために汎用ビューに変換する。関数ベースのビューで確実にページネーションを使用できます。しかし、どういうふうにあなたは改ページしていますか?そこには3つの独立したクエリーセットがあります。 –

答えて

0

それにリターンコンテキストを追加する必要があります。 pyをあなたのdjangoプロジェクトのメインurls.pyに追加します。

#urls.py 
from django.conf.urls import url 
from .views import IndexView 

urlpatterns = [ 
url(r'^path/$', IndexView.as_view(), name="index"), 
] 

その後、あなたのviews.pyであなたのindex.htmlで最後に

#views.py 
class IndexView(ListView): 
    template_name = 'index.html' 
    context_object_name = 'home_list' 
    queryset = Artist.objects.all() 
    paginate_by = 10 # Number of objects for each page 

    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 

変数paginate_byを上書き 改ページを追加{%pagination_for page_obj%}

{% block content %} 

<!--some content --> 

<!--begin paginator --> 
{% pagination_for page_obj %} 
<!--end paginator--> 

{% endblock %} 
0

get_context_data()はコンテキストを返す必要があります。これはあなたの正確なコードですもしそうなら、あなたはあなたのビューへの参照とは、このURLを含めるURLを含める必要があり、あなたのDjangoアプリからurls.pyにu​​rls.py

関連する問題