Django: отображение изображения в интерфейсе администратора - PullRequest
30 голосов
/ 14 марта 2010

Я определил модель, которая содержит ссылку на изображение. Есть ли способ отобразить изображение в списке элементов модели? Моя модель выглядит так:

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

Есть ли способ отобразить изображение вместе с заголовком?

Ответы [ 7 ]

60 голосов
/ 15 марта 2010

Вы можете создать метод экземпляра модели с другим именем, разрешить вывод HTML-тегов и добавить этот метод в качестве поля списка. Вот пример:

Сначала добавьте новый метод, возвращающий HTML для включения изображения:

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

Затем добавьте этот метод в список:

class ArticleAdmin(admin.ModelAdmin):    
    ...
    list_display = ('url', 'title', 'admin_image')
13 голосов
/ 30 января 2014
def image_tag(self, obj):
    return u'<img src="%s" />' % obj.image

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

и в вашем admin.py добавьте:

   readonly_fields = ('image_tag',)
7 голосов
/ 05 июля 2018

ОБНОВЛЕНИЕ django 2.0.6

Я решал эту проблему в последних django 2.0.6 . Я хотел добиться того, чтобы изображение было миниатюрным, а некоторые подробности отображались в списке в django-admin.

Изображение ниже - мой список администратора по умолчанию.

This is my default admin view

Это мой models.py:

from django.db import models
from django.utils.safestring import mark_safe

# Create your models here.

class Product(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField()
    price = models.DecimalField(decimal_places = 2, max_digits = 20, default = 00.00)
    image = models.ImageField(upload_to=change_image_name, null=True, blank=True)

    def image_tag(self):
        if self.image:
            return mark_safe('<img src="%s" style="width: 45px; height:45px;" />' % self.image.url)
        else:
            return 'No Image Found'
    image_tag.short_description = 'Image'


    def __str__(self):
        return self.title

Обратите внимание, что мне пришлось использовать mark_safe () в строке изображения, иначе вы получит экранированный HTML-код вместо миниатюры в django-admin

Наконец-то это мой admin.py

from django.contrib import admin

from .models import Product
# Register your models here.
class ProductAdmin(admin.ModelAdmin):
    list_display = ('title', 'description', 'price', 'image_tag')

admin.site.register(Product, ProductAdmin)

Здесь мы должны зарегистрироваться Класс ProductAdmin , я не знал, что и это не сработало.

Это результат: enter image description here

4 голосов
/ 05 февраля 2017

Вы также можете добавить изображение прямо в админ

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')
1 голос
/ 14 июля 2013

(я использую Django 1.5) В дополнение к выполнению шагов в принятом ответе я также должен был пометить тег изображения как «безопасный»

Для этого оберните возвращаемое значение с помощью метода mark_safe пакета django.utils.safestring.

пример кода: https://stackoverflow.com/a/14075441/1063031

Django Docs: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#filters-and-auto-escaping

0 голосов
/ 15 марта 2010

http://www.djangosnippets.org/snippets/239/

что плюс, если вы используете 1.2, вы можете комбинировать вышеприведенное с полями только для чтения.

0 голосов
/ 15 марта 2010

Вы можете перезаписать административный вид django для вашей модели. Подробнее см. http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates.

Вкратце вам нужно создать шаблон: templates / admin / your_app / article / change_form.html А там добавьте html для отображения изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...