我想在Django管理界面中显示一个类似缩略图的小图像。我应该怎么做?而且它似乎没有显示任何SVG文件。
models.py:
from django.db import models
import os
from PIL import Image
from datetime import date
import datetime
from .validators import validate_file_extension
import base64
def get_directory_path(instance, filename):
today = date.today()
t = datetime.datetime.now()
day, month, year = today.day, today.month, today.year
hour, minutes, seconds = t.hour, t.minute, t.second
filename = str(day) + str(month) + str(year) + str(hour) + str(minutes) + str(seconds) + '.png'
dir = 'media'
path = '{0}/{1}'.format(dir, filename)
return path
class Image(models.Model):
image = models.FileField(upload_to = get_directory_path, null = True , validators=[validate_file_extension])
created_date = models.DateTimeField(auto_now = True)
def __str__(self):
return str(self.id)
答案 0 :(得分:0)
您可以在类Image
中创建一个虚拟属性,并将其作为只读字段添加到ImageAdmin
中。
这里是一个例子:
from django.db import models
from django.utils.functional import cached_property
from django.utils.html import format_html
class Image(models.Model):
image = models.FileField(
upload_to = get_directory_path,
null = True,
validators=[validate_file_extension]
)
created_date = models.DateTimeField(auto_now = True)
def __str__(self):
return str(self.id)
@cached_property
def display_image(self):
html = '<img src="{img}">'
if self.image:
return format_html(html, img=self.image.url)
return format_html('<strong>There is no image for this entry.<strong>')
display_image.short_description = 'Display image'
方法display_image
可作为常规属性访问。我们将检查字段image
是否具有真实值(即不为null或空白),并返回包含img
标签的字符串,否则我们将输出显示无图像的文本。>
现在在管理类中,您可以执行以下操作:
class ImageAdmin(admin.ModelAdmin):
readonly_fields = ('display_image',)
当然,您必须在管理员中定义所有其他内容,上面的代码只是如何包含虚拟属性display_image
的示例。
希望这对您有所帮助,并为您提供想法。
编辑:
您可以扩展<img src="{img}">
并提供所需的其他功能。您可以为class
,id
,alt
等添加属性。如果要为图像设置固定的大小,可以创建CSS类,例如:
.admin-image {
height: 200px;
width: 300px;
}
并在Django模型中修改该行:
html = '<img src="{img}" class="admin-image">'