2010-03-14 15 views
24

Zdefiniowałem model zawierający łącze do obrazu. Czy istnieje sposób wyświetlania obrazu na liście elementów modelu? Mój model wygląda następująco:Django: Wyświetl obraz w interfejsie administratora

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 

Czy istnieje sposób wyświetlenia obrazu wraz z tytułem?

Odpowiedz

57

Można utworzyć metodę instancji modelu o innej nazwie, zezwalać na znaczniki HTML na jej wynik i dodać tę metodę jako pole listy. Oto przykład:

Pierwszy dodać nową metodę zwracania HTML do włączenia obrazu:

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

następnie dodać tę metodę do listy:

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

Masz problem. Mógłbyś spojrzeć pls TypeError w/admin/ obiektu 'MediaDefiningClass' nie jest iterable Zapytanie Metoda: \t GET Zapytanie URL: \t http://127.0.0.1:8000/admin/ Typ wyjątku: \t TypeError Wyjątek Wartość: \t obiekt „MediaDefiningClass” nie jest iterable –

+1

Właściwie ustalona poprzedni, teraz to: „admin_img” nie jest wymagalne lub atrybutem .... –

+0

ok, proszę zignorować .. . był literówka –

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

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

i twojej admin.py dodają:

readonly_fields = ('image_tag',) 
3

można też dodać obraz bezpośrednio 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

Lepsze rozwiązanie dla architektury. – SolessChong

Powiązane problemy