2017-04-12 81 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() 

虽然编译没有任何错误,当我渲染页面,上下文对象不会被渲染。 非常感谢您的帮助! Thankyou

编辑(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

有没有必要转换为通用视图只是为了使用分页;你当然可以在基于函数的视图中使用分页。但是*究竟是什么*,你分页?你有三个单独的查询集。 –

回答

0

urls.py 你需要包含一个网址,为您的意见,并参考包括该网址。 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覆盖变量paginate_by

#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 

最后,在您的index.html 添加分页{%pagination_for page_obj%}

{% block content %} 

<!--some content --> 

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

{% endblock %} 
0

您的get_context_data()需要返回上下文。所以,如果这是你确切的代码,你需要回报方面在urls.py从您的Django应用程序添加到它