我有一个由django-tables2生成的工作表:
my_filter = TestFilter(request.POST)
table = TestTable(TestObj.objects.all(), order_by="-my_date")
RequestConfig(request, paginate={"per_page": 10}).configure(table)
return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})
上面的代码返回一个包含数百个对象的表,这些对象整齐地分页,每页10个项目。当我单击表格底部的“下一步”时,分页效果很好,并且可以浏览不同的页面。但是,我注意到以下行为:
my_filter
显示原始未过滤表的子集my_filter
再次单击将显示过滤后的表格的第二页我希望过滤器在浏览不同页面时能够保持不变。我在这里发现了类似的问题。该解决方案表明需要更改html代码。但是,在我的情况下,django-
tables2正在生成html。
如何使用django-tables2通过过滤正确实现分页?
-更新-
我尝试使用GET而不是POST:
if request.method == 'GET':
my_filter = TestFilter(request.GET)
my_choice = my_filter.data['my_choice']
table = TestTable(TestObj.objects.filter(choice=my_choice), order_by="-my_date")
RequestConfig(request, paginate={"per_page": 10}).configure(table)
return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})
我的模板:
<form action="" method="get"> {% csrf_token %}
{{ my_filter }} <input type="submit" value="Apply Filter"/>
</form>
由于my_choice
GET中不存在,因此会导致KeyError 。结果,页面甚至无法加载。
您正在使用哪个版本的django_tables2?我检查了源代码,发现django_tables2使用的模板标签名为querystring
用于在table.html
模板中创建分页链接。该querystring
标签
更新 与寻呼参数的URL。所以django_tables2支持分页+开箱即用的过滤(这是我记得的)。
请尝试更新到django_tables2的最新版本,并确保您使用的是默认table.html
模板来呈现表。
您是否还在使用GET或POST提交过滤器表单?请确保使用GET提交!
最后,请看看我对这个问题的回答Django Tables-Column
Filtering
更新:
我仔细查看了您发布的代码:首先,您正在将发布数据传递到过滤器:您不能为此使用POST,POST仅应用于修改数据的操作。我还看到您不过滤任何内容,而是将.all()传递给表!实际的过滤在哪里进行?您应该按照上面答案中的描述将过滤后的数据传递给表!
更新2:
视图的问题是,当您第一次访问该页面时,该GET
词典不包含该my_choice
属性,因此在尝试my_choice
通过[]
运算符访问该属性时它将抛出异常,因此您应该使用以下命令检查它是否确实存在例如.get()
,如下所示:
my_filter = TestFilter(request.GET)
my_choice = my_filter.data.get('my_choice') # This won't throw an exception
if my_choice: # If my_choice existed on the GET dictionary this will return non-null value
table = TestTable(TestObj.objects.filter(choice=my_choice), order_by="-my_date")
else:
table = TestTable(TestObj.objects.all(), order_by="-my_date")
RequestConfig(request, paginate={"per_page": 10}).configure(table)
return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})
上面的方法应该可以工作,但是通过自己对查询集进行过滤- 您几乎违反了所有
django设计哲学!
这就是为什么我告诉您阅读我对类似问题(Django Tables-Column
Filtering)的其他答案的原因,在该问题中,我建议使用django-filter,这是一个明确用于过滤查询集的软件包。请检查文档或我的答案以查看其用法(如果您有任何疑问,我们将很乐意为您提供帮助)。
此外,您的代码还有许多其他小问题:
你并不需要检查,如果request.method
是GET
-它总是会GET
因为你不会做任何POST
小号
您不应该将其包括{{ csrf_token }}
在模板中-仅用于POST
。
本TestFilter
类实际上是一个Form
,这就是为什么我建议将其命名 TestFilterForm
或类似的东西-如果您想使用Django的过滤器,那么你会创建一个FilterSet
类which’d命名TestFilter
。正确命名类非常重要,当我第一次看到您的代码时,我认为TestFilter
该类 是 aFilterSet
而不是a Form
!
我正在Drupal7中创建一个自定义模块,使用views_datasource模块提取Json格式的数据,并在前端对数据进行角过滤(来自view的结果不到50个)。我遇到的问题是当我尝试对结果进行分页时。该应用程序显示所有结果,底部有分页编号。当我输入筛选器文本输入时,结果被正确筛选,分页反应正常(收缩和扩展)。我试图做的是使我的显示结果和分页一起工作,这样每个页面的最大结果数是2。我对此非常陌生
问题内容: 我有一个科学数据库,目前有4,300,000条记录。这是一个科学数据库,并且有API为其提供数据。到2020年6月,我可能会拥有大约1亿条记录。 这是表“输出”的de布局: 顺便说一句,这是伪数据。但是输出是一个包含5列的表格:ID,sensor_ID,速度,速度和方向。 我要实现的是一种 不错的 分页和过滤方法。我想创建一个网站(在nodejs中),其中将显示此+4,000,000条
RSS功能 Django是一个全面型框架, 很多功能都可以直接找到, 对于RSS功能, 可以从其中的高层框架的聚合Feed框架中找到(The syndication feed framework) 上层Feed生成框架可以直接应用Feed类, 我们可以直接继承Feed在其中定义自己的方法 在my_blog/article/views.py中定义类 from django.contrib.s
分页: 用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。 分段: 将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。 分页与分段的主要区别 页是信息的物理单位,分页是为了实现非连续分配
问题内容: 我正在使用该软件包在列表视图中提供搜索功能。 现在,我还要向该视图添加分页。 我正在尝试将分页与过滤后的查询集结合起来,但是我不知道如何继续。 到目前为止,我已经尝试了以下方法: 问题答案: 要使用Django过滤器并对过滤后的结果进行分页,你可以执行以下操作: 为你的模型创建一个过滤器类: 开 每个对象都有一个包含过滤查询集的属性,如果需要,你甚至可以覆盖它。 我们将对我们的财产进行
本文向大家介绍ajax实现分页和分页查询,包括了ajax实现分页和分页查询的使用技巧和注意事项,需要的朋友参考一下 之前有写过ajax的加载页面,是非常简单的,而且不需要重新刷新页面,写起来也是非常的方便,今天写的分页是不用封装page.class.php的,是单纯的js和ajax写出来的 首先为了页面的整齐与美观,我用到了bootstrap,需要引进所需要的文件包 下面是页面显示的内容 下面是j