我正在为搜索视图实现Django ListView。使用Elasticsearch和django-elasticsearch-dsl进行搜索。我实际上得到了一个只有10个项目的分页,因为这是Elasticsearh默认回答的内容数量。我可以要求elasticsearch得到所有的内容,但这将是真的unnefficient,因为我只显示像50他们。
Django有没有办法从查询集以外的地方读取分页信息?
这就是我的观点:
from .elastic import search
class SearchView(ListView):
template_name = "search/index.html"
paginate_by = 50
def get_queryset(self):
keyword = self.kwargs['keyword']
lang = get_language()
return search(keyword, lang)
字符串
编辑:
当使用数据库中的普通查询集时,django管理分页,我假设使用查询来计数对象的总数并使用paginate_by参数。在我的例子中,我在get_queryset方法上返回的queryset只有一个页面长度,因为我从elasticsearch获取这些内容。我正在寻找一种方法来告诉django查询总共有多少内容,让django构建分页。
我的搜索方法是一个对elasticsearch的查询,它返回一个查询集中的一页内容。但它不会返回所有内容。我有搜索结果的总量,但我不知道在哪里放置该变量,以允许Django构建分页。
1条答案
按热度按时间u59ebvdq1#
我有点晚了,但我是为了那些在这里着陆的人。这里的问题是Elasticsearch返回
paginate_by
结果,因此Listview paginator将尝试对这50个结果进行分页。因此,第2页将始终返回“无结果”。所以这里的想法是让分页器总是返回1,并在ElasticSearch上处理分页:
字符串
Then your listView
型
因此,默认分页总是返回1,但您在Elasticsearch上处理它。
另一种方法是从ElasticSearch加载所有结果,但它可能会占用大量内存。