In thnis short post I would like to let you know about the great projectdjango-tables.
You can read more about it at:
http://blog.elsdoerfer.name/2008/07/09/django-tables-a-queryset-renderer/
In a couple of words it lets you:
- display the table using one template which lets you sort & paginate easily (filtering in plans!)
By reading the text below you will find out how to create table with sort & pagination quickly.
In usage it's very similar do django newforms (forms as of 1.0)
Example: (views.py)
class MyTable(tables.ModelTable):
class Meta:
model = SomeModel
def view_something(request):
table = MyTable(queryset, order_by=request.GET.get('sort','some_field))
return render_to_response('templates/table.html', {'table': table, 'rows' : table.rows})
# we need to return table, and rows separately to use django-pagination (though django-tables provides its own pagination mechanism)
Now let's get to template:
{% load pagination_tags %}
{% autopaginate rows 10 %}
{% for column in table.columns %}
{% endfor %}
{% for row in rows %}
{% for value in row %}
{% endfor %}
{% if column.sortable %} {{ column }} {% if column.is_ordered_reverse %} ![]() {% else %} ![]() {% endif %} {% else %} {{ column }} {% endif %} | |
|---|---|
| {{ value }} | {% endfor %} |
That's it!
This way you get generic way of displaying tables + sorting ability.
By default, django-tables takes field names for table headers when using ModelTable (verbose_name is in plans as well).
You can exclude displaying fields too!
As for now, you can specify your own names in MyTable class.
Let's get back to our class:
class MyTable(tables.ModelTable):
class Meta:
model = SomeModel
field1 = tables.Column(name="Name")
field_we_want_to_exclude = tables.Column(visiable=Fale, sortable=False)
NOTE:
Django tables is also aware of ForeignKey relations.
Check it out!


3 comments:
Have you tried doing something similar to this?:
{% with table.rows as rows %}
{% autopaginate rows %}
{% for row in rows %}
...
{% endfor %}
{% paginate %}
{% endwith %}
Hello,
Nope.
I found django-sorting + django-pagination easier to use for that purpose.
Nice post and this post helped me alot in my college assignement. Gratefulness you seeking your information.
Post a Comment