在Django Admin中显示图像缩略图而不是图像路径

vuktfyat  于 2023-01-03  发布在  Go
关注(0)|答案(2)|浏览(225)

这是一个新手的问题,但是我如何在Django的默认管理中显示一个图片的缩略图,而不是显示该图片的路径呢?
Models.py

from django.db import models

class Project(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=500)
    thumbnail = models.ImageField(upload_to="media")

    def __str__(self):
        return self.name

class Image(models.Model):
    project = models.ForeignKey(Project)
    title = models.CharField(max_length=200)
    image = models.ImageField(upload_to="media")
    pub_date = models.DateTimeField('date published')

    def admin_thumbnail(self):
        return u'<img src="%s" />' % (self.image.url)
    admin_thumbnail.short_description = 'Thumbnail'
    admin_thumbnail.allow_tags = True

Admin.py

from .models import Project, Image

class ImageInline(admin.TabularInline):
    model = Image
    extra = 0

class ImageAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['project']}),
        (None,               {'fields': ['title']}),
        (None,               {'fields': ['image']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]

class ProjectAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['name']}),
        (None,               {'fields': ['thumbnail']}),
    ]
    inlines = [ImageInline]
    search_fields = ["name"]

admin.site.register(Project, ProjectAdmin)
admin.site.register(Image, ImageAdmin)

我不知道是否有一个更简单的方法来做这件事或没有,但无论答案将工作。谢谢!

cotxawn7

cotxawn71#

您可以使用此方法,将此方法添加到具有图像的模型中:

def image_tag(self):
    if self.thumbnail:
        return u'<img src="%s" style="width: 150px;" />' % self.thumbnail.url
    else:
        return 'No Image Found'

然后在admin.py中这样调用它:

list_display = ('image_tag', ...)

对于面向对象编程,可以创建一个父模型,并从父模型中扩展出其他具有镜像的模型,然后在父类上定义该方法

rks48beu

rks48beu2#

在保存表单或上传原始图像时,单独创建缩略图,因此模型只引用原始图像。
在www.example.com中views.py定义以下过滤器。currency.front_image是一个models.ImageField。

@register.filter
def get_thumb(img):
    file = img.url[1:].split("/")
    file[-1] = "thumb_" + file[-1]
    fp = os.path.join("/", *file)
    return fp

在html中按如下所示操作。

<td><img src="{{ currency.front_image|get_thumb }}" width="80"></td>

相关问题