Django管理员和显示缩略图图像

Asi*_*nox 47 python django django-admin

我试图在Django管理员中显示缩略图,但我只能看到图像的路径,但不能看到渲染的图像.我不知道我做错了什么.

服务器媒体URL:

from django.conf import settings
(r'^public/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
Run Code Online (Sandbox Code Playgroud)

功能模型:

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
Run Code Online (Sandbox Code Playgroud)

admin.py:

class ImagesAdmin(admin.ModelAdmin):

    list_display= ('image_img','product',) 
Run Code Online (Sandbox Code Playgroud)

结果如下:

<img src="http://127.0.0.1:8000/public/product_images/6a00d8341c630a53ef0120a556b3b4970c.125x125.jpg" />
Run Code Online (Sandbox Code Playgroud)

Dom*_*ger 69

这是photologue的来源(参见models.py,略微适应删除不相关的东西):

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

这个list_display位看起来也一样,我知道这很有效.对我来说唯一可疑的是你的缩进 - 从代码image_img末尾开始的两行 models.py应该是等级的def image_img(self):,如下所示:

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
Run Code Online (Sandbox Code Playgroud)


pal*_*der 10

更新版本1.9

请注意,在Django v.1.9中

image_tag.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

被删除,你应该使用format_html(),format_html_join()或mark_safe()代替

所以你的model.py应该是这样的:

...
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'
Run Code Online (Sandbox Code Playgroud)

并在您的admin.py中添加:

list_display= ('image_img','product',)
readonly_fields = ('image_img',)
Run Code Online (Sandbox Code Playgroud)

并在admin.py添加中将其添加到管理面板的"编辑模式"中:

fields = ( 'image_img', )
Run Code Online (Sandbox Code Playgroud)


小智 7

在模型中添加方法(models.py):

def image_tag(self):
    return u'<img src="%s" />' % <URL to the image>
image_tag.short_description = 'Image'
image_tag.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

并在您的ModelAdmin(admin.py)中添加:

readonly_fields = ('image_tag',)
Run Code Online (Sandbox Code Playgroud)


sau*_*ook 6

添加到@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)
Run Code Online (Sandbox Code Playgroud)

具有image返回图像的Frontpage功能.

在我的另一个应用程序:

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)
Run Code Online (Sandbox Code Playgroud)

这允许我指定图像对象,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
Run Code Online (Sandbox Code Playgroud)