Skip to main content

A simple Django app to origanize data in tabular form.

Project description

# django-datatable

![preview](https://dl.dropboxusercontent.com/u/94696700/example.png)

## Overview

django-datatable is a simple Django app to origanize data in tabular form and
based on [datatable](http://datatables.net) and [bootstrap](http://getbootstrap.com/).

It is worth mention that design of this project makes reference to [django-table2](https://github.com/bradleyayers/django-tables2)
and mainly for the purpose of learning. I really appreciate that anyone make pull-request to improve it.


## Requirement

* Python 2.x

* jQuery 1.6+

* Bootstrap 3.0

* Django 1.5+

## Quick start

- Setup Django-datatable application in Python environment:

$ pip install django-datatable

- Add "table" to your INSTALLED_APPS setting like this:

INSTALLED_APPS = (
...,
'table',
)

- Define a simple model named Person:

# example/app/models.py
class Person(models.Model):
name = models.CharField(max_length=100)

- Add some data so you have something to display in the table.
Now define a PersonTable class without any options in table file.

# example/app/tables.py
from models import Person
from table import Table
from table.columns import Column

class PersonTable(Table):
id = Column(field='id')
name = Column(field='name')
class Meta:
model = Person

And pass a table instance to the view.

# example/app/views.py
from django.shortcuts import render
from app.tables import PersonTable

def people(request):
people = PersonTable()
return render(request, "index.html", {'people': people})

- Finally, implement the template:

{# example/templates/index.html}
{% load static %}
{% load table_tags %}

<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'js/bootstrap.min.js' %}"></script>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>person</title>
</head>
<body>
<div class="container" style="margin-top: 10px">
<h1>people</h1>
<br />
{% render_table people %}
</div>
</body>
</html>

## Tag

Render the whole table by simple tag `{% render_table %}`, pass `Table` instance as single argument.

{% render_table table %}


## DataSource

* Model

Use a django MTV model as table data source, and queries all data in database by default.
see **model** in table options for details.

* QuerySet

Similiar to **Model**, but pass queryset when you initialize table instance instead of defining model option.
Basically, it used to filtering or sorting data your want to display in table.

Models:

# models.py
class Person(models.Model):
name = models.CharField(max_length=100)

Tables:

# tables.py
from models import Person
from table import Table
from table.columns import Column

class PersonTable(Table):
id = Column(field='id')
name = Column(field='name')

Views:

# views.py
from django.shortcuts import render
from models import Person
from app.tables import PersonTable

def people(request):
people = PersonTable(Person.objects.all())
return render(request, "index.html", {'people': people})

* Dict-List

Use a list of directories as table data source. Fields which declared in columns correspond to the keys of directory.

Tables:

# tables.py
from table import Table
from table.columns import Column

class PersonTable(Table):
id = Column(field='id')
name = Column(field='name')

Views:

# views.py
from django.shortcuts import render
from app.tables import PersonTable

def people(request):
data = [{'id': 1, 'name': 'John'}, {'id': 2, 'name': 'Tom'}]
people = PersonTable(data)
return render(request, "index.html", {'people': people})

* Ajax

For large number of data, load them on front-end entirely is impossible.
So, django-table provides a simle option 'ajax' to load data from server-side asynchronous.

Note that once toggle `ajax`, `model` option is necessary. Django-table will make paging/searching/sorting based on `ModelClass.objects.all()`.

Urls:

# urls.py
urlpatterns = patterns('',
url(r'^table/', include(table.urls')),
)

Tables:

# tables.py
from table import Table
from table.columns import Column

class PersonTable(Table):
id = Column(field='id')
name = Column(field='name')

class Meta:
model = Person
ajax = True

If you want to customize base data, use `ajax_source` option and
implement your own Class-based View by subclassing `FeedDataView`.

Tables:

# tables.py
class PersonTable(Table):
id = Column(field='id')
name = Column(field='name')

class Meta:
model = Person
ajax = True
ajax_source = reverse_lazy('table_data')

Urls:

# urls.py
urlpatterns = patterns('',
url(r'^table/data/$', MyDataView.as_view(), name='table_data'),
)

Views:

# views.py
from table.views import FeedDataView
from app.tables import PersonTable

class MyDataView(FeedDataView):

token = PersonTable.token

def get_queryset(self):
return super(MyDataView, self).get_queryset().filter(id__gt=5)

## Columns

* Column

* Link Column

* Datetime Column

* Checkbox Column

* Sequence Column

* Calendar Column

## Widgets

* search-box

* info-label

* pagination

* length-menu

* extense-button

## API Reference

* [wiki](https://github.com/shymonk/django-datatable/wiki/API-Reference)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-datatable-0.2.0.tar.gz (131.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page