Python django-tables2-如何使用非queryset数据分页分配项目总数?
我从一个带有“请求”库的API中获取数据,我想在html表中显示每页10项。因此,我从API中获取10项,对象总数为(假设有1000项)。当我将数据推送到html表中时,不会创建分页,因为我不知道如何将项目总数分配给该表Python django-tables2-如何使用非queryset数据分页分配项目总数?,python,django,django-tables2,Python,Django,Django Tables2,我从一个带有“请求”库的API中获取数据,我想在html表中显示每页10项。因此,我从API中获取10项,对象总数为(假设有1000项)。当我将数据推送到html表中时,不会创建分页,因为我不知道如何将项目总数分配给该表 # tables.py class CustomerTable(tables.Table): id = tables.Column() name = tables.LinkColumn('customer:edit', kwargs={'id': A('id')
# tables.py
class CustomerTable(tables.Table):
id = tables.Column()
name = tables.LinkColumn('customer:edit', kwargs={'id': A('id')})
class Meta:
order_by = 'name'
# views.py
# content of a view
data = {'total_count': 1000, "objects": [{'id':1, 'name': 'foo'}, {'id':2, 'name': 'bar'}, {'id':3, 'name': 'baz'}]}
table = CustomerTable(data['objects'])
table.paginate(page=self.request.GET.get('page', 1), per_page=1)
self.render_to_response({'table': table})
问题:如何将项目总计数(数据['total_count']
)分配给表格进行分页?来自文档:
表与一系列输入数据结构兼容。如果你有
在本教程中,您将看到正在使用的queryset,不管它有多大
支持len()并包含公开基于密钥的项的iterable
可以访问列值
因此,您可以围绕API调用创建自己的包装器类,该类在调用len()时请求数据的长度
这样做可能会奏效,不过您可能希望对其进行优化,使其仅访问API并返回所需的项,而不是下面建议的整个数据集
class ApiDataset(object):
def __init__(self, api_addr):
self.http_api_addr = api_addr
self.data = None
def cache_data(self):
# Access API and cache returned data on object.
if self.data is None:
self.data = get_data_from_api()
def __iter__(self):
self.cache_results()
for item in self.data['objects']:
yield item
def __len__(self):
self.cache_results()
return self.data['total_count']
使用此设置,您可以将APIDataset实例传递给django-tables2表构造函数。来自文档:
表与一系列输入数据结构兼容。如果你有
在本教程中,您将看到正在使用的queryset,不管它有多大
支持len()并包含公开基于密钥的项的iterable
可以访问列值
因此,您可以围绕API调用创建自己的包装器类,该类在调用len()时请求数据的长度
这样做可能会奏效,不过您可能希望对其进行优化,使其仅访问API并返回所需的项,而不是下面建议的整个数据集
class ApiDataset(object):
def __init__(self, api_addr):
self.http_api_addr = api_addr
self.data = None
def cache_data(self):
# Access API and cache returned data on object.
if self.data is None:
self.data = get_data_from_api()
def __iter__(self):
self.cache_results()
for item in self.data['objects']:
yield item
def __len__(self):
self.cache_results()
return self.data['total_count']
使用此设置,您可以将APIDataset实例传递给django-tables2表构造函数。来自文档:
表与一系列输入数据结构兼容。如果你有
在本教程中,您将看到正在使用的queryset,不管它有多大
支持len()并包含公开基于密钥的项的iterable
可以访问列值
因此,您可以围绕API调用创建自己的包装器类,该类在调用len()时请求数据的长度
这样做可能会奏效,不过您可能希望对其进行优化,使其仅访问API并返回所需的项,而不是下面建议的整个数据集
class ApiDataset(object):
def __init__(self, api_addr):
self.http_api_addr = api_addr
self.data = None
def cache_data(self):
# Access API and cache returned data on object.
if self.data is None:
self.data = get_data_from_api()
def __iter__(self):
self.cache_results()
for item in self.data['objects']:
yield item
def __len__(self):
self.cache_results()
return self.data['total_count']
使用此设置,您可以将APIDataset实例传递给django-tables2表构造函数。来自文档:
表与一系列输入数据结构兼容。如果你有
在本教程中,您将看到正在使用的queryset,不管它有多大
支持len()并包含公开基于密钥的项的iterable
可以访问列值
因此,您可以围绕API调用创建自己的包装器类,该类在调用len()时请求数据的长度
这样做可能会奏效,不过您可能希望对其进行优化,使其仅访问API并返回所需的项,而不是下面建议的整个数据集
class ApiDataset(object):
def __init__(self, api_addr):
self.http_api_addr = api_addr
self.data = None
def cache_data(self):
# Access API and cache returned data on object.
if self.data is None:
self.data = get_data_from_api()
def __iter__(self):
self.cache_results()
for item in self.data['objects']:
yield item
def __len__(self):
self.cache_results()
return self.data['total_count']
使用此设置,可以将APIDataset实例传递给django-tables2表构造函数。从中获取数据的API是否能够返回对象计数?如果没有,您将如何计算显示分页器的页面数?是的,API可以返回对象计数,但我不知道如何将对象计数分配给表进行分页。您能提供代码和平吗?提供有用的答案会容易得多。@nickzam我在问题中添加了示例代码。从中获取数据的API是否能够返回对象计数?如果没有,您将如何计算显示分页器的页面数?是的,API可以返回对象计数,但我不知道如何将对象计数分配给表进行分页。您能提供代码和平吗?提供有用的答案会容易得多。@nickzam我在问题中添加了示例代码。从中获取数据的API是否能够返回对象计数?如果没有,您将如何计算显示分页器的页面数?是的,API可以返回对象计数,但我不知道如何将对象计数分配给表进行分页。您能提供代码和平吗?提供有用的答案会容易得多。@nickzam我在问题中添加了示例代码。从中获取数据的API是否能够返回对象计数?如果没有,您将如何计算显示分页器的页面数?是的,API可以返回对象计数,但我不知道如何将对象计数分配给表进行分页。您能提供代码和平吗?提供有用的答案会容易得多。@nickzam我在问题中添加了示例代码。