2010-09-06 17 views
5

Przeczytałem kilka innych postów na ten temat, a niektóre zalecenia dotyczyły javascript i korzystania z innych bibliotek. Zrobiłem coś szybko, ale jestem nowy w Django i Pythonie, więc jestem ciekawy, czy to nie jest dobry sposób na zrobienie tego.Sortowalne tabele w Django

HTML

<table> 
     <tr> 
      <td><a href="?sort=to">To</a></td> 
      <td><a href="?sort=date">Date</a></td> 
      <td><a href="?sort=type">Type</a></td> 
     </tr> 
     {% for record in records %} 
     <tr><td>{{record.to}}</td><td>{{record.date}}</td><td>{{record.type}}</td></tr> 
     {% endfor %} 
    </table> 

Zobacz

headers = {'to':'asc', 
     'date':'asc', 
     'type':'asc',} 

def table_view(request): 
    sort = request.GET.get('sort') 
    if sort is not None: 
     if headers[sort] == "des": 
      records = Record.objects.all().order_by(sort).reverse() 
      headers[sort] = "asc" 
     else: 
      records = Record.objects.all().order_by(sort) 
      headers[sort] = "des" 
    else: 
     records = Record.objects.all() 
    return render_to_response("table.html",{'user':request.user,'profile':request.user.get_profile(),'records':records}) 
+0

I nie otrzymuj kodu: dyktafon nigdy nie jest odesłany do klienta, więc dla mnie test wewnętrzny zawsze będzie się powracał do części else, a co za tym idzie, wszystko będzie zawsze sortowane w kolejności asc. – madewulf

Odpowiedz

2

Wygląda dobrze na mnie. Sugeruję jeden drobny refaktoryzacji kodu Widok:

headers = {'to':'asc', 
     'date':'asc', 
     'type':'asc',} 

def table_view(request): 
    sort = request.GET.get('sort') 
    records = Record.objects.all() 

    if sort is not None: 
     records = records.order_by(sort) 

     if headers[sort] == "des": 
      records = records.reverse() 
      headers[sort] = "asc" 
     else: 
      headers[sort] = "des" 

    return render_to_response(...)