Python Django管理和显示缩略图

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

我试图在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/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)