Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架中的JSON字段分页_Python_Django_Rest_Pagination - Fatal编程技术网

Python Django REST框架中的JSON字段分页

Python Django REST框架中的JSON字段分页,python,django,rest,pagination,Python,Django,Rest,Pagination,我试图在最新的Django REST框架中添加分页, 由于轨迹可能超过1-2 k,如何在轨迹字段内提供分页 { 'album_name': 'The Grey Album', 'artist': 'Danger Mouse' 'tracks': [ {'title': 'Public Service Announcement'}, {'title': 'What More Can I Say'},

我试图在最新的Django REST框架中添加分页, 由于轨迹可能超过1-2 k,如何在轨迹字段内提供分页

{
    'album_name': 'The Grey Album',
    'artist': 'Danger Mouse'
    'tracks': [
               {'title': 'Public Service Announcement'},
               {'title': 'What More Can I Say'},
               {'title': 'Encore'},
               ............ 1k
              ],
}

希望您使用的是viewset,但如果没有它,它将正常工作。如果您不熟悉视图集,您可以在此处了解它们:

views.py

from django.core.paginator import Paginator
...
class AlbumViewSet(viewsets.ModelViewSet):
queryset = Album.objects.all()
serializer_class = AlbumSerializer

@detail_route()
def tracks(self, request, pk, page):

    # if you want to use url: albums/<album_id>/tracks/page/
    track_set = Tracks.objects.get(album_id=int(pk))

    # elif you want to use url: albums/<album_name>/tracks/page/
    track_set = Tracks.objects.get(album_album_name=pk)

    paginator = Paginator(track_set, page_size) # ! change page_size to yours
    serializer = TrackSerializer(paginator.page(page), many=True, context={'request': request})
    return Response(serializer.data)
从django.core.paginator导入paginator
...
类AlbumViewSet(viewsets.ModelViewSet):
queryset=Album.objects.all()
serializer\u class=AlbumSerializer
@详细资料(路线)
def跟踪(自我、请求、主键、页面):
#如果要使用url:albums/)

#小路由器示例
从rest_framework.router导入默认路由器
路由器=默认路由器()
router.register(r'albums',View.PostViewSet)
#结束小路由器的例子
用户发布=views.AlbumViewSet.as\u视图({
“获取”:“跟踪”
})
URL模式=[
...
url(r'^albums/(?P\w+)/tracks/(?P[0-9]+)/,用户帖子),
...
]

现在您可以像这样获取url:albums/my_name\u是\u jeff/tracks/1或albums/5/tracks/1。除了“little router example”之外,所有的代码都是必需的,是的,将它与简单的ClassBasedView一起使用是愚蠢的

你试过django.core.paginator吗?有很多答案的问题。希望这将对您有所帮助。pagination.PaginationSerializer这是用于DRF<3.0版的。此类已被删除
# little router example
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'albums', views.PostViewSet)
# end little router example

user_posts = views.AlbumViewSet.as_view({
    'get': 'tracks'
})
urlpatterns = [
     ...
     url(r'^albums/(?P<pk>\w+)/tracks/(?P<page>[0-9]+)/', user_posts),
     ...
]