我从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')})
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})
问题:如何将总项目数(data['total_count']
)分配给表格进行分页?
答案 0 :(得分:3)
来自文档here:
表与一系列输入数据结构兼容。如果你的话 看过教程,你会看到一个正在使用的查询集,无论如何 iterable,支持len()并包含公开基于键的项 访问列值很好。
因此,您可以围绕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表构造函数。