django-tables2が並べ替えられていないテーブルをレンダリングし、1つの列で並べ替えたい場合は、それをクリックします。デフォルトの動作では、昇順で並べ替えられます。
最初のクリックが降順でソートされるように変更する方法はありますか?
django-tables2が並べ替えられていないテーブルをレンダリングし、1つの列で並べ替えたい場合は、それをクリックします。デフォルトの動作では、昇順で並べ替えられます。
最初のクリックが降順でソートされるように変更する方法はありますか?
それは可能です、これがその方法です。
まず、テーブルのレンダリングに使用されるデフォルトのtable.htmlテンプレートをオーバーライドする必要があります(独自のテンプレートをまだ使用していない場合)。django-tables2に含まれているものから始めることができます。
次に、テンプレートで、並べ替えに使用されるアンカーを見つけます。
{% if column.orderable %}
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
{% else %}
そして、これを次のように変更します。
{% if column.orderable %}
{% with "-"|add:column.name as sort_col_name %}
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.opposite|default:sort_col_name %}">{{ column.header }}</a></th>
{% endwith %}
{% else %}
したがって、基本的には-
、ページが並べ替えなしで読み込まれた場合に降順で並べ替えを強制するために、デフォルトで列名の前にを追加し、の.opposite
代わりにに向け.next
ます。これを行う必要があるの.next
は、常に定義されるのに対し.opposite
、ソートなしのページ読み込みではNoneになり、デフォルトのフィルターが実行されるためです。並べ替えが定義されている場合.opposite
、並べ替え順序を適切に切り替えます。
これはテストされていないことに注意してください。問題がある場合は、django-tables2ソースで詳細を確認してください。