2010-11-11 4 views
1

Bonjour, je suis nouveau à Django et travaille sur le projet Pootle.Comment montrer la liste triée par achèvement complet dans Pootle

Je voudrais trier par Complètement complète par défaut dans la page d'index pootle. par exemple, http://pootle.locamotion.org/ répertorie les langues et triées par noms. vous pouvez cliquer sur les boutons de tri pour voir trier par achèvement. mais je voudrais montrer cette liste triée par l'achèvement chaque fois que charger une page.

dans pootle/LOCAL_APPS/pootle_app/templates/index/index.html,

<table class="sortable"> 
      <tr> 
       <th>{% trans 'Language' %}</th> 
       <th>{% trans 'Overall Completion' %}</th> 
       <th>{% trans 'Last Activity' %}</th> 
      </tr> 
      {% for item in languages %} 
      {% ifnotequal item.total 0 %} 
      <tr class="{% cycle 'even' 'odd' %}"> 
       <td class="language"> 
         <a href="{% filter l %}/{{ item.code }}/{% endfilter %}">{{ item.name }}</a></td> 
       <td> 
         <div class="sortkey">{{ item.transper }}</div> 
         <div class="graph" title="{{ item.completed_title }}" dir="{% if LANGUAGE_BIDI %}rtl{% else %}ltr{% endif %}"> 
         <div class="translated" style="width: {{ item.transper }}px"></div> 
         {% if item.fuzzy %} 
         <div class="fuzzy" style="{%if LANGUAGE_BIDI%}right{%else%}left{%endif%}: {{ item.transper }}px; width: {{ item.fuzzyper }}px"></div> 
         {% endif %} 
         {% if item.untrans %} 
         <div class="untranslated" style="{% if LANGUAGE_BIDI %}right{% else %}left{% endif %}: {{ item.transper|add:item.fuzzyper }}px; width: {{ item.untransper }}px"></div> 
         {% endif %} 
        </div> 
       </td> 
       <td>{{ item.lastactivity }}</td> 
      </tr> 
      {% endifnotequal %} 
      {% endfor %} 
     </table> 

item.transper est la clé que je veux trier.

et ce point est ainsi et la langue est définie:

def get_items(request, model, get_last_action, name_func): 

    items = []                       
    if not check_permission('view', request):               
     return items 

    for item in model.objects.iterator():                
     stats = item.getquickstats()                  
     stats = add_percentages(stats)                 

     lastact = get_last_action(item)                 
     items.append({ 
      'code': item.code, 
      'name': name_func(item.fullname), 
      'lastactivity': lastact,                  
      'trans': stats["translatedsourcewords"],              
      'fuzzy': stats["fuzzysourcewords"],               
      'untrans': stats["untranslatedsourcewords"],             
      'total': stats["totalsourcewords"],               
      'transper': stats["translatedpercentage"], 
      'fuzzyper': stats["fuzzypercentage"],              
      'untransper': stats["untranslatedpercentage"],            
      'completed_title': _("%(percentage)d%% complete", 
           {'percentage': stats['translatedpercentage']}), 
      }) 
    items.sort(lambda x, y: locale.strcoll(x['name'], y['name'])) 
    return items   

def getlanguages(request): 
    def get_last_action(item): 
     try:    
      return Submission.objects.filter(translation_project__language=item).latest() 
     except Submission.DoesNotExist: 
      return '' 

    return get_items(request, Language, get_last_action, tr_lang) 

Que dois-je changer cela pour que je vois Tri par défaut achèvement global?

Merci beaucoup pour toutes les suggestions

Répondre

2

Changer

items.sort(lambda x, y: locale.strcoll(x['name'], y['name'])) 

à

items.sort(lambda x, y: cmp(x['transper'], y['transper'])) 

(Cela fonctionne bien avec la fonction cmp builtin parce que les transper champs sont convertis en int s par la fonction nice_percentage, qui est appelée dans le cadre de add_percentages)

Si cela ne produit pas la commande voulue, il vous suffit de basculer entre les objets x et y.


Si au contraire, vous devez trier dans le modèle (il est généralement une mauvaise idée de jouer avec le code source des applications de tierce partie), vous pouvez utiliser the dictsort filter:

{% for item in languages|dictsort:"transper" %} 

Encore une fois, si ce n'est pas l'ordre que vous vouliez, utilisez dictsortreversed.

+0

grâce à eternicode !! {% pour l'élément dans les langues | dictsortreversed: "transper"%} fonctionne! très appréciée! –

0

La dernière version de développement de Pootle, devenue Pootle 2.2, se souvient maintenant de la colonne sur laquelle vous avez choisi de trier. Ainsi, un rechargement de page se souviendra de la dernière commande utilisée.

Questions connexes