更新2020
由于这个答案最近受到了很多关注,我决定进行小小的编辑。
根据django文档的建议,推荐使用函数format_html。
正如@chem1st建议的那样,如果您只需要它用于管理,一切都可以在admin.py中完成。
我的models.py
from django.db import models
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 __str__(self):
return self.title
我的 admin.py
from django.contrib import admin
from django.utils.html import format_html
from .models import Product
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'description', 'price', 'image_tag')
def image_tag(self,obj):
return format_html('<img src="{0}" style="width: 45px; height:45px;" />'.format(obj.image.url))
admin.site.register(Product, ProductAdmin)
更新django 2.0.6
我在最新的django 2.0.6中解决了这个问题。我想在django-admin的列表视图中有一个图像缩略图。
下面的图片是我的默认管理列表视图。
这是我的models.py:
from django.db import models
from django.utils.safestring import mark_safe
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 代码而不是缩略图。
最后,这是我的admin.py
from django.contrib import admin
from .models import Product
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'description', 'price', 'image_tag')
admin.site.register(Product, ProductAdmin)
在这里,我们还需要注册 ProductAdmin 类,我不知道这一点,所以它没有起作用。
这是结果: