May 032011
 

L’admin django est vraiment un bonheur pour la productivité. On peut faire plein de choses en moins de temps qu’il n’en faut pour écrire le descriptif des choses en questions.

Après avoir passé quelques heures à farfouiller dans la doc et à faire quelques tests, je me suis dit qu’il n’y avait pas de raisons que je garde mes découvertes pour moi.

Voici donc un premier billet pour partager les plus utiles avec vous.

list_display, comment changer l’entête d’une colonne fonction.

On sait tous comment configurer les colonnes que l’on va afficher dans la vue en liste des content_type. En utilisant list_display. Mais est ce que cela ne vous ai jamais arrivé de vouloir afficher le résultat d’une fonction ?

Aucun problème, il suffit de mettre le nom de la fonction dans list_display. Oui c’est vrai, sauf que.. sauf que l’entête de colonne c’est le nom de la fonction.. Et ça, ce n’est pas très joli.

Sauf que, sauf que django pense à tout. Pour pouvoir afficher un intitulé de colonne sympa au lieu du nom de la fonction, il suffit de rajouter à votre fonction un attribut short_description qui contiendra l’intitulé voulu.

Un petit exemple :

class TestAdmin (admin.ModelAdmin):
    list_display = ('name', 'foo', 'bar', 'super_function')


class Test (model.Models):
    …
    def super_function(self):
        ….
   super_function.short_description =u'mon intitulé de colonne qui tue'

list_display, comment utiliser du HTML dans les colonnes .

De même, il se peut que votre super fonction qui tue, renvoie non pas une valeur simple (genre un nombre) mais du code html (que vous aurez bien entendu généré avec un template). Sauf que là, oh rage, oh désespoir. Vous avez beau faire tout les mark_safe du monde, rien n’y fait. Votre code est escaped…

Comment modifier ça ? La encore, ça passe par un attribut de fonction, allow_tags qu’il vous suffira de mettre à True. Et miracle, ça fonctionne.

Sorry, the comment form is closed at this time.