Fel*_*ing 40
如果您使用分页而不是Javascript表分类器,则可能不够或行为意外.
创建每个列标题作为链接,例如
<th><a href="?order_by=name">Name</a></th>
Run Code Online (Sandbox Code Playgroud)
并在您的视图中检查order_by
参数是否设置:
order_by = request.GET.get('order_by', 'defaultOrderField')
Model.objects.all().order_by(order_by)
Run Code Online (Sandbox Code Playgroud)
我使用的方法是上面最多投票的答案.但是,我通过使用自定义标记在列标题上多次单击时解决了升序/降序排序.
标签:
from urllib.parse import urlencode
from collections import OrderedDict
@register.simple_tag
def url_replace(request, field, value, direction=''):
dict_ = request.GET.copy()
if field == 'order_by' and field in dict_.keys():
if dict_[field].startswith('-') and dict_[field].lstrip('-') == value:
dict_[field] = value
elif dict_[field].lstrip('-') == value:
dict_[field] = "-" + value
else:
dict_[field] = direction + value
else:
dict_[field] = direction + value
return urlencode(OrderedDict(sorted(dict_.items())))
Run Code Online (Sandbox Code Playgroud)
然后在列标题上使用此标记,如上所示:
<th><a href="?{% url_replace request 'order_by' 'name' '-' %}">Name</a></th>
Run Code Online (Sandbox Code Playgroud)
第一次单击它将按"降序"排序,如果再次单击相同的标题,它将恢复为"升序"顺序.
如果您使用的是分页符,此方法还会保留URL中的其他参数,例如页码.它不需要额外的库.您需要确保的是,您的视图是将RequestContext发送到模板.
归档时间: |
|
查看次数: |
24772 次 |
最近记录: |