Python django-tables2-如何使用非queryset数据分页分配项目总数?

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')

我从一个带有“请求”库的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})
问题:如何将项目总计数(
数据['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我在问题中添加了示例代码。