如何将视图方法转换为通用列表视图?
How do I convert a view method to a Generic List View?
我在查看页面有这个方法。它工作正常并正确显示所有内容,但我想将其转换为通用列表视图,以便我可以对其应用分页。
函数如下:`
#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()
虽然编译没有任何错误,但是当我渲染页面时,上下文对象没有被渲染。
非常感激您的帮忙!
谢谢
编辑(17 年 4 月 13 日):
谢谢你们!经过一些小的修改,它终于可以工作了。
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
您的 get_context_data() 需要 return 上下文。因此,如果这是您的确切代码,则需要向其中添加 return context
urls.py
在你的 django 应用程序的 urls.py 中,你需要包含一个引用你的视图的 url,并将这个 urls.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 %}
我在查看页面有这个方法。它工作正常并正确显示所有内容,但我想将其转换为通用列表视图,以便我可以对其应用分页。
函数如下:`
#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()
虽然编译没有任何错误,但是当我渲染页面时,上下文对象没有被渲染。 非常感激您的帮忙! 谢谢
编辑(17 年 4 月 13 日): 谢谢你们!经过一些小的修改,它终于可以工作了。
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
您的 get_context_data() 需要 return 上下文。因此,如果这是您的确切代码,则需要向其中添加 return context
urls.py 在你的 django 应用程序的 urls.py 中,你需要包含一个引用你的视图的 url,并将这个 urls.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 %}