我尝试使用django-tables2创建一个排行榜表格,允许用户按所有列进行排序、搜索和过滤。我没有做任何特别的事情,只是遵循了django-tables2中的文档。
下面是它在模型中的样子:
class LeaderboardTable(tables.Table):
rank = tables.TemplateColumn('{{ record.rank }}')
name = tables.TemplateColumn('{{ record.user__first_name }} {{ record.user__last_name }}')
team = tables.TemplateColumn('{{ record.team }}')
points = tables.TemplateColumn('{{ record.points }}')下面是它在视图中的样子:
def get_leaderboard(request):
table = LeaderboardTable(Profiles.objects.select_related().all())
RequestConfig(request).configure(table)
return render(request, 'leaderboard.html', {'table': table})如果你看上面的代码,你可能会注意到name列是不正确的,因为我还没有想好如果我组合到一个queryset中的字段如何排序-如果你也能回答这个问题那就太好了。
我喜欢django-tables2处理表的创建和分页;但是,每次我点击sort/next或prev page时,它都会导致页面刷新。有没有办法抑制这种情况?另外,我不知道这是否是因为我返回了10,000条记录,但是django-tables2在排序和分页方面似乎相当慢。
我是否使用了正确的应用程序进行此操作?你们觉得我是不是该用点别的?
发布于 2012-06-26 05:36:34
django-tables2 不支持在不刷新页面的情况下(此时)使用JavaScript进行排序/分页。
返回10k条记录应该不会有问题。我建议你使用像django-debug-toolbar这样的东西来看看哪些查询执行得很慢(例如,你的select_related()调用可能不起作用)。
您可以将表重写为:
class LeaderboardTable(tables.Table):
rank = tables.Column()
name = tables.Column(order_by=("first_name", "last_name"))
team = tables.Column()
points = tables.Column()
def render_name(self, record):
return u"%s %s" % (record.user.first_name, record.user.last_name)检查使用render_name是否解决了性能问题。它应该比使用TemplateColumn更快,但只有当您在表的每一页中呈现大量行时,这才应该是重要的。
发布于 2014-05-31 00:57:24
对于要放入表中的这么多项,并且能够在不刷新整个页面的情况下对表进行排序,我建议您使用SlickGrid,这是一个接受json数据作为输入的javascript库。
只需将查询集转储到json变量中并将其传递给模板即可。
https://stackoverflow.com/questions/11182063
复制相似问题