【问题标题】:Django tables2 set default sort to be descendingDjango tables2 将默认排序设置为降序
【发布时间】:2013-02-19 11:40:11
【问题描述】:

当 django-tables2 渲染一个未排序的表时,我想按一列排序,我点击它,默认行为是按升序排序。

有什么办法可以改变它,让第一次点击按降序排列?

【问题讨论】:

    标签: django 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 source 了解更多信息。

    【讨论】:

    • 谢谢,很有魅力! - 我已经到了模板中的那个位置,但不知道 .opposite 和 |default 过滤器是保持事物整洁的一种非常简洁的方式。
    猜你喜欢
    • 2016-09-18
    • 2011-06-20
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多