Django:在管理界面中显示图像

时间:2010-03-14 20:56:39

标签: django django-models

我已经定义了一个包含图像链接的模型。有没有办法在模型项目列表中显示图像?我的模型看起来像这样:

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 个答案:

答案 0 :(得分:59)

您可以使用其他名称创建模型实例方法,为其输出允许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')

答案 1 :(得分:11)

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',)

答案 2 :(得分:5)

更新Django 2.0.6

我正在最新的 django 2.0.6 中解决了此问题。我想在django-admin的listview中实现图像缩略图和更多详细信息。

下面的图片是我的默认管理员列表视图。

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(),否则   将在django-admin中获得转义的html代码而不是thubnail

最后,这是我的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

答案 3 :(得分:4)

您也可以直接在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')

答案 4 :(得分:1)

(我正在使用Django 1.5) 除了按照接受的答案中的步骤之外,我还必须将图像标记标记为“安全”

为此,请使用django.utils.safestring包的mark_safe方法包装返回值。

代码示例:https://stackoverflow.com/a/14075441/1063031

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

答案 5 :(得分:0)

您可以为您的模型覆盖django管理员视图。有关详细信息,请参阅http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

在简介中,您需要创建一个模板:templates / admin / your_app / article / change_form.html 然后添加html来显示图像。

答案 6 :(得分:0)

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

还有,如果您使用的是1.2,则可以将上述内容与只读字段结合使用。