I am new to Python, MongoDB(mongoengine(ODM)) and the pyramid framework as a whole. I am currently working on a project using the above mentioned technologies and I want to use jQuery datatables(also new to this) I found a link on their site on how to use datatables with MongoDB, but it is in php and my translation skills aren't that good.
my question is: Is it possible to use datatables using the above mentioned technologies, if yes, then how? I have tried converting someone else's code that used SQLAlchemy with datatables, but I am stuck as I do not know how to change the function. @view_config( route_name='candidate.list.json', renderer='json', permission="admin" ) def candidate_list_json(context, request): def format_output(vals): vals = list(vals) vals[-1] = """<div class="btn-group"><a href='%s' class=btn>View</a><a href='%s' class=btn>Edit</a></div>""" % ( request.route_url('candidates', id_number=vals[-1], traverse=()), request.route_url('candidates', id_number=vals[-1], traverse="edit") ) vals[0] = "<a href='%s'>%s</a>" % (request.route_url('candidates', id_number=vals[0], traverse=()), vals[0]) return vals if has_permission('admin', context, request): basefilt = None # I changed Up to here return handle_datatable( request, Agents.id, [Agents.db_agent_id, Agents.db_name, Agents.id_number, Agents.mobile_number, OrgUnits.name, Agents.db_agent_id], lambda term: or_(Agents.db_agent_name.like('%'+term+'%'), OrgUnits.name.like('%'+term+'%'), Agents.mobile_number.like('%'+term+'%'), Agents.id_number.like('%'+term+'%'), ), join=[Agents.ou], formatfunc=format_output, base_filt=basefilt ) handle_datatable is a method: def handle_datatable(request, idcol, cols, filtfunc, options=None, cache='short_term', formatfunc=None, displaylength=90, join=None, base_filt=None, outerjoin=None, groupby=None, no_paginate=False, ordercols=None, orderby=None, printquery=False, nocount=False): s = sqlahelper.get_session() if groupby is not None and type(groupby) != list and type(groupby) != tuple: groupby = [groupby] def attachfilt(q, filt, nogroup=False): if filt: q = q.filter(and_(*filt)) if join: q = q.join(*join) if outerjoin: q = q.outerjoin(*outerjoin) if options: q = q.options(*options) if groupby and not nogroup: for g in groupby: q = q.group_by(g) return q @cache_region('short_term') def perform_count(filt, idcol, term): if not nocount: return attachfilt(s.query(idcol), filt, nogroup=False).count() else: return 0 #@cache_region('short_term', 'handle_search') def perform_search(filt, cols, iStart, iLength, order_cols): q = attachfilt(s.query(*cols), filt) if order_cols: q = q.order_by(*order_cols) if printquery: print q if no_paginate: rows = q.all() else: rows = q[iStart:iStart+iLength] if callable(formatfunc): data = [formatfunc(row[:]) for row in rows] else: data = [row[:] for row in rows] return data if not callable(filtfunc): raise Exception("Filter Function is not callable") if not cols: raise Exception("Please provide columns to search") if not no_paginate: iStart = int(str(request.params.get("iDisplayStart", 0))) iLength = int(str(request.params.get("iDisplayLength", displaylength))) else: iStart = 0 iLength = 0 if not ordercols: ordercols = cols if orderby: order_cols = orderby else: order_cols = [] if request.params.get("iSortCol_0", None): iSortingCols = int(str(request.params.get('iSortingCols', 0))) for k in range(0, iSortingCols): iSortCol = int(str(request.params.get('iSortCol_%s' % k, 0))) sSortDir = str(request.params.get('sSortDir_%s' % k, 0)) if str(request.params.get('bSortable_%s' % iSortCol, 'false') == 'true'): col = ordercols[iSortCol] if sSortDir == "asc": order_cols.append(col.asc()) else: order_cols.append(col.desc()) search = request.params.get("sSearch", None) filt = [] if search: filt = filtfunc(search) if filt is not None and type(filt) != list: filt = [filt] if type(cols) != list: cols = [cols] itotal = perform_count([base_filt], idcol, search) if no_paginate: iLength = itotal if base_filt is not None: filt.append(base_filt) cnt = perform_count(filt, idcol, search) data = perform_search(filt, cols, iStart, iLength, order_cols) return dict( sEcho=request.params.get("sEcho", 0), iTotalRecords=itotal, iTotalDisplayRecords=cnt, aaData=data ) As I said before I am new to these Technologies, but I am willing to learn, if you can just point me in the right direction. -- https://mail.python.org/mailman/listinfo/python-list