[英]Django-Rest-Framework csv module using paginated module
Hello I am using the django-rest-framework-csv
module and I have followed the instructions to create a Paginated renderer using this code:您好,我正在使用
django-rest-framework-csv
模块,我已按照说明使用以下代码创建分页渲染器:
from rest_framework_csv.renderers import CSVRenderer
class PaginatedCSVRenderer (CSVRenderer):
results_field = 'results'
def render(self, data, media_type=None, renderer_context=None):
if not isinstance(data, list):
data = data.get(self.results_field, [])
return super(PaginatedCSVRenderer, self).render(data, media_type, renderer_context)
as I found it on their github site: django-rest-framework-csv .正如我在他们的 github 站点上找到的那样: django-rest-framework-csv 。 What I want the renderer to do is to return everything in the csv.
我希望渲染器做的是返回 csv 中的所有内容。 Currently it only returns the current page.
目前它只返回当前页面。 Can someone help?
有人可以帮忙吗?
You can use python csv module to convert the page and return in csv . 您可以使用python csv模块转换页面并返回csv。 I haven't tested it but i think it should work.
我还没有测试过,但是我认为它应该可以工作。 I am assuming tab delimiter but you can change it.
我假设使用制表符分隔符,但可以更改它。
import csv
class PaginatedCSVRenderer (CSVRenderer):
results_field = 'results'
def render(self, data, media_type=None, renderer_context=None):
if not isinstance(data, list):
data = data.get(self.results_field, [])
csv_input= super(PaginatedCSVRenderer, self).render(data, media_type, renderer_context)= csv.reader(open(txt_file, "rb"), delimiter = '\t')
csv_output = csv.writer(csv_input)
return csv_output
I know its been a long time since the question was posted - but I had the same requirement.我知道问题发布已经很长时间了 - 但我有同样的要求。
I ended up overriding get_page_size
method of my PageNumberPagination
s custom implementation.我最终覆盖了我的
PageNumberPagination
的自定义实现的get_page_size
方法。
Here is what I did:这是我所做的:
from rest_framework.pagination import PageNumberPagination
from rest_framework.settings import api_settings
from rest_framework_csv.renderers import CSVRenderer
class CustomPageNumberPagination(PageNumberPagination):
page_size = 20
page_size_query_param = 'page_size'
max_page_size = 50
def get_page_size(self, request):
'''
Set page size to unlimited (by returning None) when request format is CSV.
'''
# My version limits this only for admin users but feel free to change it.
if request.user and request.user.is_staff:
try:
data_format = request.query_params[api_settings.URL_FORMAT_OVERRIDE]
if data_format == CSVRenderer.format:
return None
except (KeyError, ValueError):
pass
return super(CustomPageNumberPagination, self).get_page_size(request)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.