Python Django管理和显示缩略图
我试图在Django admin中显示缩略图,但我只能看到图像的路径,而不能看到渲染图像。我不知道我做错了什么 服务器媒体URL:Python Django管理和显示缩略图,python,django,django-admin,Python,Django,Django Admin,我试图在Django admin中显示缩略图,但我只能看到图像的路径,而不能看到渲染图像。我不知道我做错了什么 服务器媒体URL: from django.conf import settings (r'^public/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}), 结果是: <img src="http://127.0.0.1:8000/public/p
from django.conf import settings
(r'^public/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
结果是:
<img src="http://127.0.0.1:8000/public/product_images/6a00d8341c630a53ef0120a556b3b4970c.125x125.jpg" />
这是的源代码(请参见models.py
,稍微调整以删除不相关的内容):
加上@dominic,我想在多个模型中使用它,所以我创建了一个函数,可以在每个模型中调用,输入要显示的图像 例如,在我的一个应用程序中:
from django.contrib import admin
from .models import Frontpage
from ..admin import image_file
class FrontpageAdmin(admin.ModelAdmin):
list_display = ('image_thumb', ...)
image_thumb = image_file('obj.image()')
admin.site.register(Frontpage, FrontpageAdmin)
from django.contrib import admin
from .models import Exhibition
from ..admin import image_file
class ExhibitionAdmin(admin.ModelAdmin):
list_display = ('first_image_thumb', ...)
first_image_thumb = image_file('obj.related_object.image',
short_description='First Image')
admin.site.register(Exhibition, ExhibitionAdmin)
使用image
返回图像的Frontpage函数
在另一个应用程序中,我有:
from django.contrib import admin
from .models import Frontpage
from ..admin import image_file
class FrontpageAdmin(admin.ModelAdmin):
list_display = ('image_thumb', ...)
image_thumb = image_file('obj.image()')
admin.site.register(Frontpage, FrontpageAdmin)
from django.contrib import admin
from .models import Exhibition
from ..admin import image_file
class ExhibitionAdmin(admin.ModelAdmin):
list_display = ('first_image_thumb', ...)
first_image_thumb = image_file('obj.related_object.image',
short_description='First Image')
admin.site.register(Exhibition, ExhibitionAdmin)
这允许我指定图像对象和short_description
,同时将样板文件保存在另一个文件中。功能是:
from sorl.thumbnail import get_thumbnail
from django.conf import settings
def image_file(image, short_description='Image'):
def image_thumb(self, obj):
image = eval(image_thumb.image)
if image:
thumb = get_thumbnail(image.file, settings.ADMIN_THUMBS_SIZE)
return u'<img width="{}" height={} src="{}" />'.format(thumb.width, thumb.height, thumb.url)
else:
return "No Image"
image_thumb.__dict__.update({'short_description': short_description,
'allow_tags': True,
'image': image})
return image_thumb
从sorl.缩略图导入获取缩略图
从django.conf导入设置
def image_文件(图像,简称为“图像”):
def图像_拇指(自身,obj):
image=eval(image\u thumb.image)
如果图像:
thumb=获取缩略图(image.file、settings.ADMIN\u THUMBS\u SIZE)
返回u“”。格式(thumb.width、thumb.height、thumb.url)
其他:
返回“无图像”
图像\u thumb.\uuu dict\uuuu.update({'short\u description':short\u description,
“允许_标记”:True,
“图像”:图像})
返回图像
在模型中添加方法(models.py
):
更新。1.9
请注意,在Django v.1.9中
因此,您的model.py应该如下所示:
def image_img(self):
if self.image:
return u'<img src="%s" />' % self.image.url_125x125
else:
return '(Sin imagen)'
image_img.short_description = 'Thumb'
image_img.allow_tags = True
...
def image_img(self):
if self.image:
return marksafe('<img src="%s" />' % self.image.url_125x125)
else:
return '(Sin imagen)'
image_img.short_description = 'Thumb'
from imagekit.admin import AdminThumbnail
@register(Fancy)
class FancyAdmin(ModelAdmin):
list_display = ['name', 'image_display']
image_display = AdminThumbnail(image_field='image')
image_display.short_description = 'Image'
# set this to also show the image in the change view
readonly_fields = ['image_display']
要在admin.py的管理面板的“编辑模式”中添加它,请添加:
使用,您可以添加以下任何图像:
def image_img(self):
if self.image:
return u'<img src="%s" />' % self.image.url_125x125
else:
return '(Sin imagen)'
image_img.short_description = 'Thumb'
image_img.allow_tags = True
...
def image_img(self):
if self.image:
return marksafe('<img src="%s" />' % self.image.url_125x125)
else:
return '(Sin imagen)'
image_img.short_description = 'Thumb'
from imagekit.admin import AdminThumbnail
@register(Fancy)
class FancyAdmin(ModelAdmin):
list_display = ['name', 'image_display']
image_display = AdminThumbnail(image_field='image')
image_display.short_description = 'Image'
# set this to also show the image in the change view
readonly_fields = ['image_display']
由于是,您应该使用format\u html
函数。示例代码如下所示:
models.py
文件:
class TestAdminModel(models.Model):
img = models.URLField()
from django.utils.html import format_html
class TestAdmin(admin.ModelAdmin):
list_display = ["id", "img", "thumbnail"]
def thumbnail(self, obj):
return format_html('<img src="{}" style="width: 130px; \
height: 100px"/>'.format(obj.img))
thumbnail.short_description = 'thumbnail'
admin.site.register(models.TestAdminModel, TestAdmin)
admin.py
文件:
class TestAdminModel(models.Model):
img = models.URLField()
from django.utils.html import format_html
class TestAdmin(admin.ModelAdmin):
list_display = ["id", "img", "thumbnail"]
def thumbnail(self, obj):
return format_html('<img src="{}" style="width: 130px; \
height: 100px"/>'.format(obj.img))
thumbnail.short_description = 'thumbnail'
admin.site.register(models.TestAdminModel, TestAdmin)
来自django.utils.html导入格式\u html
类TestAdmin(admin.ModelAdmin):
列表显示=[“id”、“img”、“缩略图”]
def缩略图(自身、obj):
返回格式\u html(“”.format(obj.img))
thumbnail.short_description='thumbnail'
admin.site.register(models.TestAdminModel,TestAdmin)
结果如下所示:
您可以从中查看更多详细信息,您将图像\u img功能放在哪里?我在
类ImagesAdmin(admin.ModelAdmin)下编写了它:
但它在呈现时给我错误,因为捕获了类型错误:image\u img()正好接受1个参数(2个给定参数)@brsbilgic-它需要在您的模型下运行,除非您在self
之后添加第二个参数,称为类似于obj
,它表示您正在使用的模型。请参见。如果我还想在模型的编辑页面上显示缩略图,该怎么办?仅供参考,以便用户知道当前上传的图像是什么?明白了(以防其他人也不知道)别忘了在字段中添加图像标记:fields=['image\u tag',…]
注意:image\u img()
方法应该接受实例
:def image\u img(self,instance):
并使用instance
而不是self
获取URL。def image\u img(self):
,然后您可以使用self.field\u name
获取字段,不需要实例参数(my Django version v1.9)@Phil Gyford
from django.utils.html import format_html
class TestAdmin(admin.ModelAdmin):
list_display = ["id", "img", "thumbnail"]
def thumbnail(self, obj):
return format_html('<img src="{}" style="width: 130px; \
height: 100px"/>'.format(obj.img))
thumbnail.short_description = 'thumbnail'
admin.site.register(models.TestAdminModel, TestAdmin)