Как реализовать разбиение на страницы в приложениях Django и React без использования инфраструктуры REST? - PullRequest
2 голосов
/ 21 июня 2019

Я работаю над сайтом, бэкэнд которого находится в Django, а интерфейс разрабатывается с использованием React. Я хочу добавить функцию пагинации на веб-сайт, но не знаю, как она будет реализована в веб-интерфейсе.

Я хочу отправить общее количество страниц в приложение реагирования.

До сих пор я писал следующий код в своей функции просмотров

def index(request):
    influencers = Influencer.objects.all()

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id)

    queryset = list(chain(paged_listings,user_list),paginator.count)
    ser_query = serializers.serialize('json', queryset)
    return HttpResponse(ser_query)

Также я не использую REST Framework для разработки внутреннего сайта.

Я хочу знать, какую информацию я должен отправить на интерфейсный сайт React, чтобы это работало. Как мне поступить?

1 Ответ

1 голос
/ 21 июня 2019

Я бы порекомендовал вам использовать django-rest-framework, потому что это, вероятно, проще с нумерацией страниц.

Однако, если вы хотите избежать передачи своей собственной структуры (очевидно, вам может потребоваться передать другую информацию, такую ​​как следующая страница / предыдущая страница и т. Д.).

Задача здесьубедиться, что все сериализуемо в JSON - это означает, что для Queryset вы должны использовать .values ​​() и обернуть результат списком ().Для Paginator вам нужно заключить в список ().

from django.http.response import JsonResponse

def index(request):
    influencers = Influencer.objects.all().values()

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id).values()

    queryset = list(chain(paged_listings,user_list),paginator.count)
    content = {'total_page_count': paginator.num_pages, 'data': queryset}
    return JsonResponse(content)
...