Usage ===== Configuration ------------- Include `django_sorting_bootstrap` in your `INSTALLED_APPS` Put `{% load sorting_tags %}` at top of your templates. Your templates have four tags available: - `auto_sort` - `sort_link` - `sort_th` - `sort_headers` Basic usage ----------- .. code:: html {% auto_sort queryset %} {% sort_link "link text" "field_name" %} {% sort_th "link text" "field_name" %} {% sort_headers simpleschangelist %} Django views ~~~~~~~~~~~~ For sorting to work, your views have to 1. add the current sort field to the context 2. apply the sorting to the queryset For a generic ListView, this could be done as follows:: from django.views.generic import ListView class ExampleListView(ListView): model = MyModel def get_context_data(self, **kwargs): # add current sort field to context c = super(ExampleListView, self).get_context_data(**kwargs) if "sort_by" in self.request.GET: c["current_sort_field"] = self.request.GET.get("sort_by") return c def get_queryset(self): # apply sorting qs = super(ExampleListView, self).get_queryset() if "sort_by" in self.request.GET: qs = qs.order_by(self.request.GET.get("sort_by")) return qs Template Tags ~~~~~~~~~~~~~ 1. auto_sort It sorts the queryset in place and replaces the queryset by the sorted queryset. This needs to be called prior to a slice has been taken from a queryset. (Ordering can not be done after the slice has been taken.) In particular this will not work with generuc view `object_list`. Basic usage: .. code:: html {% auto_sort queryset %} 2. sort_link Sort link outputs a link which will sort on the given field. The field to sort on should be a database field, or something which `.order_by` of queryset would work. Basic usage: .. code:: html {% sort_link "link text" "field_name" %} Example usage: .. code:: html {% sort_link "Name" "name" %} It may also be used as: .. code:: html {% sort_link "link text" "field_name" "vis_name" %} {% sort_link "Name" "name" "what" %} This is useful if you do not wnat to expose your database fields in urls. 3. sort_th It works the same way as sort_link, but the difference is the output template that renders a table header tag `