Django管理后台显示缩略图

54 投票
6 回答
41970 浏览
提问于 2025-04-15 14:06

我想在Django的后台显示缩略图图片,但我只能看到图片的路径,而看不到实际的图片。我不知道我哪里做错了。

服务器的媒体网址:

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

功能模型:

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

admin.py文件:

class ImagesAdmin(admin.ModelAdmin):

    list_display= ('image_img','product',) 

结果是:

<img src="http://127.0.0.1:8000/public/product_images/6a00d8341c630a53ef0120a556b3b4970c.125x125.jpg" />

6 个回答

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

然后在你的管理文件(admin.py)中添加:

readonly_fields = ('image_tag',)
12

更新 v. 1.9

请注意,在 Django v.1.9 中,

image_tag.allow_tags = True

某些功能已经不再推荐使用,你应该改用 format_html()、format_html_join() 或 mark_safe() 来替代

所以你的 model.py 文件应该像这样:

...
from django.utils.html import mark_safe

def image_img(self):
    if self.image:
        return mark_safe('<img src="%s" />' % self.image.url_125x125)
    else:
        return '(Sin imagen)'
    image_img.short_description = 'Thumb'

然后在你的 admin.py 文件中添加:

list_display= ('image_img','product',)
readonly_fields = ('image_img',)

在你的 admin.py 文件中,为了在管理面板的“编辑模式”中添加它,请添加:

fields = ( 'image_img', )
76

这是在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

这里的list_display部分看起来也完全一样,我知道这个是可以工作的。让我觉得有问题的只有你的缩进 - 在你的models.py代码的最后,有两行以image_img开头的代码应该和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

撰写回答