在Django admin内联中显示缩略图

Sha*_*qwa 3 python django django-models

我是Django的新手,并尝试更改管理面板中的内嵌图像.我可以在每个"当前"上方添加预览标记并显示缩略图吗?

在此输入图像描述

小智 7

在 Django 3.0 中对我有用的简单解决方案:

在 models.py 中添加:

from django.utils.safestring import mark_safe

def image_preview(self):
    if self.image:
        return mark_safe('<img src="{0}" width="150" height="150" />'.format(self.image.url))
    else:
        return '(No image)'
Run Code Online (Sandbox Code Playgroud)

在管理.py中:

class ProductImagesAdmin(admin.TabularInline):
    model = ProductImages
    readonly_fields = ('image_preview',)
Run Code Online (Sandbox Code Playgroud)


Chr*_*lon 6

您需要在 model.py 中添加一个方法:

def thumbnail(self):
  return u'<img src="%s" />' % (self.image.url)

thumbnail.short_description = 'Thumbnail'
Run Code Online (Sandbox Code Playgroud)

然后在 admin.py 中添加:

fields = ( 'thumbnail', )
readonly_fields = ('thumbail',)
Run Code Online (Sandbox Code Playgroud)

这将在那里添加缩略图。

  • 我这样做了,但我希望在内联图像上具有相同的功能。 (2认同)

Sha*_*qwa 6

经过大量的挖掘,我成功地做到了.不幸的是我找不到我使用的来源(太多标签,太多不起作用..).所以我的想法是创建一个Image Widget,它附加一些html脚本.

from django.contrib.admin.widgets import AdminFileWidget

class AdminImageWidget(AdminFileWidget):
         def render(self, name, value, attrs=None):
         output = []
         if value and getattr(value, "url", None):
              image_url = value.url
              file_name=str(value)
              output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" width="150" height="150"  style="object-fit: cover;"/></a> %s ' % \
            (image_url, image_url, file_name, _('')))
    output.append(super(AdminFileWidget, self).render(name, value, attrs))
    return mark_safe(u''.join(output))


class CollectionImageInline(admin.TabularInline):
    formfield_overrides = {models.ImageField: {'widget': AdminImageWidget}}
Run Code Online (Sandbox Code Playgroud)

结果:(我将管理主题更改为默认值,无论此问题如何) 在此输入图像描述

  • 这有效,谢谢。我会在顶部添加导入:`from django.utils.safestring import marksafe from django.db import models` (2认同)