博客 2016-07-27

简介:

总结下前端、后端遇到的排序问题


后端排序:

1.一个表一列是char ,但存的是数字

op.objects.filter(op_other='net_ip_count').extra(select={'op_char': 'CAST(op_03 AS  INTEGER)'})
.order_by('op_char')


2.一个表一列是IP

ip.objects.filter(ip_vlan=obj[1]).extra(select={'ipa': "inet_aton(ip_address)"}).order_by('ipa')


前端排序:

主要是 字典、序列 通过 前端模板排序 

1.增加模板函数:

应用目录为 app01

templatetags/
├── __init__.py
├── myfilter.py

mkdir app01/templatetags
touch app01/templatetags/__init__.py

vim app01/templatetags/myfilter.py

# -*- coding : utf-8 -*-

from django import template  
@register.filter(name='sort')
def listsort(value):
    if isinstance(value, dict):
        a = []
        key_list = sorted(value.keys(),key=my_key)
        for key in key_list:
            a.append((key, value[key]))
        return a
    elif isinstance(value, list):
        return sorted(value)
    else:
        return value

listsort.is_safe = True

def my_key(dict_key):
    try:
        return int(dict_key)
    except ValueError:
        return dict_key


2.在前端页面引用

{% load myfilter %}

{% for key,value in ip_list|sort %}



参考资料: