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)
您需要在 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)
这将在那里添加缩略图。
经过大量的挖掘,我成功地做到了.不幸的是我找不到我使用的来源(太多标签,太多不起作用..).所以我的想法是创建一个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)