簡體   English   中英

django-tables2在排序和頁面更改時刷新

[英]django-tables2 refreshes on sorting and page change

我試圖弄亂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列是不正確的,因為我還沒有弄清楚如果我將其組合到查詢集中的字段時該如何排序-如果您也可以回答這個問題,那將是很好的。

我喜歡django-tables2處理表的創建和分頁。 但是,每次我點擊排序/下一頁或上一頁時,都會刷新頁面。 有沒有辦法抑制這種情況? 另外,我不知道是否是因為我要返回10,000條記錄,但是django-tables2在排序和分頁方面似乎很慢。

我為此使用了正確的應用程序嗎? 你們認為我應該使用其他東西嗎?

django-tables2 支持使用JavaScript進行排序/分頁而不刷新頁面(此時)。

返回1萬條記錄應該沒有問題。 我建議您使用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更快,但這僅在表的每一頁中呈現大量行時才有意義。

對於要放入表中並在不刷新整個頁面的情況下對表進行排序的此類項目,我建議您使用SlickGrid ,這是一個將json數據作為輸入的javascript庫。

只需將您的queryset轉儲到json var中,然后將其傳遞到模板即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM