Django数据表视图

django-datatables-view的Python项目详细描述


关于

django datatables视图是用于处理服务器端的基本视图 处理awesome数据表1.9.x,1.10.x (http://datatables.net)。

django datatables视图简化了排序、筛选和 创建json输出,定义如下: http://datatables.net/examples/server_side/

示例

使用django datatables视图的示例项目位于: https://bitbucket.org/pigletto/django-datatables-view-example/

用法

一。安装django datatables视图

pip install django-datatables-view

2.编辑视图.py

django_datatables_view使用genericviews,因此您的视图应该 只从基类继承:basedatatableview,并覆盖少数 事物(也有一个纯粹的反粒子处理器) 可以与你选择的混合料一起使用,例如Django支架。这些 是:

  • model-应该用来填充数据表的模型
  • -将要显示的列。如果没有 然后django_datatables_视图将在 数据表在请求中提供的列定义,例如: columndefs:[{name:'name',targets:[0]}(仅适用于数据表 1.10+
  • order_columns-用于排序的列名列表(例如,if 用户在此列表中按第二列排序,然后按第二列名称排序 将与ORDER BY子句一起使用)。如果没有定义 django_datatables_view将在列中查找“name” 由数据表在请求中提供的定义,例如:columndefs: [{name:'name',targets:[0]}(仅适用于datatables 1.10+)
  • filter\u queryset-如果您想在 然后用特定的方法重写此方法。如果是旧的数据表 (1.10之前)您需要重写此方法,否则将没有 过滤。
  • filter_方法-默认情况下返回“istartswith” 重写它以使用不同的筛选方法,例如icontains:return 自过滤图标

对于更高级的定制,您可能需要覆盖:

  • get_initial_queryset-应该返回所用queryset的方法 填充数据表
  • 准备结果-此方法应返回列表(行)列表 带列)根据数据表的需要
  • escape\u值-可以将此属性设置为false以便 不是render_column方法返回的转义值

代码相当简单,所以不要犹豫,看看它。 首先执行的方法(并调用其他方法执行 整个逻辑)是get_context_data。一定要看看这个 方法!

请参见下面的示例:

fromdjango_datatables_view.base_datatable_viewimportBaseDatatableViewfromdjango.utils.htmlimportescapeclassOrderListJson(BaseDatatableView):# The model we're going to showmodel=MyModel# define the columns that will be returnedcolumns=['number','user','state','created','modified']# define column names that will be used in sorting# order is important and should be same as order of columns# displayed by datatables. For non sortable columns use empty# value like ''order_columns=['number','user','state','','']# set max limit of records returned, this is used to protect our site if someone tries to attack our site# and make it return huge amount of datamax_display_length=500defrender_column(self,row,column):# We want to render user as a custom columnifcolumn=='user':# escape HTML for security reasonsreturnescape('{0} {1}'.format(row.customer_firstname,row.customer_lastname))else:returnsuper(OrderListJson,self).render_column(row,column)deffilter_queryset(self,qs):# use parameters passed in GET request to filter queryset# simple example:search=self.request.GET.get('search[value]',None)ifsearch:qs=qs.filter(name__istartswith=search)# more advanced example using extra parametersfilter_customer=self.request.GET.get('customer',None)iffilter_customer:customer_parts=filter_customer.split(' ')qs_params=Noneforpartincustomer_parts:q=Q(customer_firstname__istartswith=part)|Q(customer_lastname__istartswith=part)qs_params=qs_params|qifqs_paramselseqqs=qs.filter(qs_params)returnqs

三。编辑url.py

添加典型的django的urlconf条目:

url(r'^my/datatable/data/$',login_required(OrderListJson.as_view()),name='order_list_json'),

四。定义html+javascript

示例js:

$(document).ready(function(){varoTable=$('.datatable').dataTable({// ...
"processing":true,"serverSide":true,"ajax":"{% url 'order_list_json' %}"});// ...
});

views.py自定义的另一个示例

fromdjango_datatables_view.base_datatable_viewimportBaseDatatableViewfromdjango.utils.htmlimportescapeclassOrderListJson(BaseDatatableView):order_columns=['number','user','state']defget_initial_queryset(self):# return queryset used as base for futher sorting/filtering# these are simply objects displayed in datatable# You should not filter data returned here by any filter values entered by user. This is because# we need some base queryset to count total number of records.returnMyModel.objects.filter(something=self.kwargs['something'])deffilter_queryset(self,qs):# use request parameters to filter queryset# simple example:search=self.request.GET.get('search[value]',None)ifsearch:qs=qs.filter(name__istartswith=search)# more advanced examplefilter_customer=self.request.GET.get('customer',None)iffilter_customer:customer_parts=filter_customer.split(' ')qs_params=Noneforpartincustomer_parts:q=Q(customer_firstname__istartswith=part)|Q(customer_lastname__istartswith=part)qs_params=qs_params|qifqs_paramselseqqs=qs.filter(qs_params)returnqsdefprepare_results(self,qs):# prepare list with output column data# queryset is already paginated herejson_data=[]foriteminqs:json_data.append([escape(item.number),# escape HTML for security reasonsescape("{0} {1}".format(item.customer_firstname,item.customer_lastname)),# escape HTML for security reasonsitem.get_state_display(),item.created.strftime("%Y-%m-%d %H:%M:%S"),item.modified.strftime("%Y-%m-%d %H:%M:%S")])returnjson_data

又一个views.py自定义示例

此示例假定列和顺序列的列表是在 客户端(数据表),例如:

$(document).ready(function(){vardt_table=$('.datatable').dataTable({order:[[0,"desc"]],columnDefs:[{name:'name',orderable:true,searchable:true,targets:[0]},{name:'description',orderable:true,searchable:true,targets:[1]}],searching:true,processing:true,serverSide:true,stateSave:true,ajax:TESTMODEL_LIST_JSON_URL});});
classTestModelListJson(BaseDatatableView):model=TestModel

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java RFID不完整输出?   java如何构造一个for循环来查找每个数组的第一个索引的总和   java Eclipse AST解析器正在删除我的规则   安卓如何在java中创建“可重写”配置?   java每次我向应用程序添加图像时,它都会崩溃   Java 8流到文件   EntityNotFoundException的java可能原因   java多线程为什么下面的程序表现得如此怪异?   java footprint soap api+mavenjaxb2plugin   java MongoDB锁定,直到找到结果   java重写Jtable选项卡行为转到下一个可编辑单元格   java关于方法和创建另一个方法   java将人脸与图像分离   java复制Spring批处理作业实例   java TextView不会更改为新设置的文本