2010-03-14 3 views
24

J'ai défini un modèle qui contient un lien et une image. Est-il possible d'afficher l'image dans la liste des éléments de modèle? Mon modèle ressemble à ceci:Django: Afficher l'image dans l'interface admin

class Article(models.Model): 
    url = models.CharField(max_length = 200, unique = True) 
    title = models.CharField(max_length = 500) 
    img = models.CharField(max_length = 100) # Contains path to image 

    def __unicode__(self): 
     return u"%s" %title 

Existe-t-il un moyen d'afficher l'image avec le titre?

Répondre

57

Vous pouvez créer une méthode d'instance de modèle avec un autre nom, autoriser les balises HTML pour sa sortie et ajouter cette méthode en tant que champ de liste. Voici un exemple:

d'abord ajouter une nouvelle méthode renvoyant le code HTML pour l'inclusion d'image:

class Article(models.Model): 
    ... 
    def admin_image(self): 
     return '<img src="%s"/>' % self.img 
    admin_image.allow_tags = True 

ajouter cette méthode à la liste:

class ArticleAdmin(admin.ModelAdmin):  
    ... 
    list_display = ('url', 'title', 'admin_image') 
+0

Vous avez un problème. Pourriez-vous jeter un oeil pls TypeError à/admin/ objet 'MediaDefiningClass' est pas itérables demande Méthode: \t GET URL de demande: \t http://127.0.0.1:8000/admin/ Exception Type: \t TypeError Exception Valeur: \t object 'MediaDefiningClass est de ne pas Iterable –

+1

en fait fixé le précédent, maintenant ceci: « admin_img » est pas un appelable ou un attribut de .... –

+0

ok, s'il vous plaît ne pas tenir compte .. était une faute de frappe –

11
def image_tag(self, obj): 
    return u'<img src="%s" />' % obj.image 

image_tag.short_description = 'Image' 
image_tag.allow_tags = True 

et dans votre admin.py ajouter:

readonly_fields = ('image_tag',) 
3

vous pouvez également ajouter l'image directement dans l'admin

class ArticleAdmin(admin.ModelAdmin): 

    def admin_image(self, obj):      
     return '<img src="%s"/>' % obj.img 
    admin_image.allow_tags = True 

    list_display = ('url', 'title', 'admin_image') 
+0

Meilleure solution pour l'architecture. – SolessChong