在django-tables2中,显示的行数取决于屏幕大小?

时间:2018-02-12 18:08:02

标签: django django-tables2

使用django-tables2时,请使用paginate参数来限制显示的行数。例如,如果我有表my_table,那么在views.py中我将其设置为显示10行,如下所示:

RequestConfig(request, paginate={'per_page':10}).configure(my_table)

我的问题是,在我的应用中,我希望每页显示的行数取决于用户屏幕的大小。例如,移动设备有10行,桌面屏幕有25行。我想象在views.py中使用媒体规则(例如@media(max-height: 480px) {do something})使用样式表做什么。

不幸的是,我的(noob)理解是在Django中,视图与屏幕大小等低级参数相对隔离。但是,我不想实现一些方案,比如将模板中的信息发送到视图中,如果已经有一个简单的解决方案被烘焙到django-tables2中,我只是不知道。

注意我正在使用Bootstrap4作为我的前端,如果这有任何区别。关键是我已经将Javascript和jQuery导入到项目中,至少在模板级别。

相关的一般性讨论
有趣的是,我还没有看到很多关于将表行数调整为媒体类型的讨论,但显然有很多关于响应式媒体敏感设计的一般性讨论:

1 个答案:

答案 0 :(得分:1)

我没有直截了当或完整的解决方案,但我会分享一些想法:

当(最初)渲染表时,Django-tables2无法知道屏幕大小。其中一种解决方法可能满足您的需求:

渲染更少的行

在初始页面视图中,如果您的屏幕尺寸较小:

  • 隐藏一些行,然后使用JavaScript调整您为下一页请求的偏移量和页数。这将涉及重写分页链接的url参数。
  • 使用较小的号码重新加载页面,per_page添加到网址。
  • 默认为呈现较少的行数,并允许用户更改使用下拉列表呈现的行数,这对于移动用户是隐藏的。

针对响应性优化模板

针对不同的屏幕尺寸优化模板,而不是更改行数。有关如何工作的示例可以在webpack documentation中显示的表格中找到。但是,使用这种技术,您可能仍希望在较小的屏幕上使用较少的行。

客户端表格排序

如果总行数合理,将所有内容发送到客户端并将分页推迟到datatables之类的内容可能会有效。