2010-07-18 5 views
1

Comment puis-je modifier le résultat de la sortie de la liste de résultats de Django Admin? Je l'ai regardé dans le fichier modèle de change_result_list.html mais tout ce que je peux trouver est:Personnalisation de la liste de résultats de Django Admin

{% for item in result %}{{ item }}{% endfor %} 

qui sera fournir en sortie quelque chose comme:

<tr> 
    <td> 
     <input type="checkbox" class="action-select" value="2" name="_selected_action" /> 
    </td> 
    <th> 
     <a href="1/">Lorem Ipsum</a> 
    </th> 
</tr> 

De toute évidence, les e pauses élément mon design. Est-il de toute façon pour le changer en td?

Répondre

2

Il n'y a pas de façon "facile" de le faire, je dois donc d'abord vous demander pourquoi exactement vous avez besoin de le faire. Je ne vois pas pourquoi l'élément <th> devrait "évidemment" casser votre conception. L'élément <th> est équivalent à <td>, sauf qu'il a un style supplémentaire par défaut (généralement font-weight: bold; text-align: center;). Vous devriez pouvoir en tenir compte dans votre CSS.

Cela dit, voici quelques pistes à suivre. Le choix th/td est déterminé à la ligne 169 (Django 1.2.1) de django.contrib.admin.templatetags.admin_list.py. Voici un résumé snipped du contexte, il apparaît dans:

def items_for_result(cl, result, form): 
    first = True 
    for field_name in cl.list_display: 
     # ... 
     if (first and not cl.list_display_links) or field_name in cl.list_display_links: 
      table_tag = {True:'th', False:'td'}[first] 
      first = False 
      # ... 
      yield mark_safe(u'<%s%s><a href="%s"%s>%s</a></%s>' % (table_tag, row_class, url, ...) 
     else: 
      # ... 
      yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr)) 

Comme vous pouvez le voir, il n'y a aucun moyen évident de modifier le comportement qui détermine la valeur de table_tag, donc quelques-unes des options que vous avez sont:

  • Définissez un modèle de modèle "items_for_result" qui appelle celui ci-dessus et remplace <th> s dans les valeurs fournies avec <td> s. Ensuite, vous pouvez remplacer "change_list.html" et {% load%} le tag après le chargement de "admin_list".
  • Modifiez le code Django. Vous le regretterez plus tard cependant.
  • Si vous êtes OK avec aucune des colonnes du tableau étant un lien vers la page d'édition de l'élément (je ne peux pas imaginer pourquoi vous), vous pouvez utiliser ce hack laid dans votre admin.py:

    admin.site.register(YourModel, YourModelAdmin) 
    admin.site._registry[YourModel].list_display_links = ['not_a_field_name',]` 
    

    Puisque les modèles d'administration sont qu'une seule fois validé, ce qui se passe lorsque register() est appelé, vous pouvez récupérer le ModelAdmin enregistré par la suite et lui donner une propriété list_display_links non valide.

+0

En effet, éditer le CSS est beaucoup plus facile. Cependant, du point de vue de l'utilisabilité (et de mon idéalisme), il ne devrait être utilisé que pour une cellule d'en-tête. C'est juste ridicule pourquoi ils utilisent th au lieu de td. – Furunomoe

Questions connexes