如何在Django管理界面中美观地显示上传的文件?

2 投票
1 回答
5177 浏览
提问于 2025-04-18 13:06

我正在搭建一个新的Django应用,现在还处于初期阶段。所以目前我主要专注于设计数据模型。表单、视图、模板、前端AJAX等内容会在后面再处理。我正在使用Django的管理界面来创建和查看一些虚拟的模型对象。

我有一个模型,其中有一个ImageField属性。在管理界面上,我可以上传一个叫做taco.jpg的文件到这个模型里。我可以去文件系统查看,发现这个文件确实已经成功上传。它的文件路径也在管理界面上显示出来了:

在这里输入图片描述

但是,当我点击那个链接时,会出现错误,因为在urls.py文件中没有为这个文件指定路径:

在这里输入图片描述

我该怎么做才能让每次上传文件时,urls.py中自动添加对应的路径?还有,我该怎么做才能让照片的缩略图在管理界面的详细视图中显示(如果我点击那个缩略图,应该能显示全尺寸的图片)

这是我的urls.py文件:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
)

这是我的数据模型:

class Photo(models.Model):
    image = models.ImageField(null=True, upload_to='documents/%Y/%m/%d')

这是管理文件:

class PhotoAdmin(admin.ModelAdmin):
    fields = ["image",]
    list_display = ("image",)
admin.site.register(Photo, PhotoAdmin)

1 个回答

3

看起来你忘了处理媒体文件。要做到这一点,只需按照这个链接上的说明操作。

如果你想在管理后台显示图片的预览,可以这样做:

把以下内容添加到PhotoAdmin中:

def image_img(self):
    if self.image:
        return u'<img src="%s" />' % self.image.url 
    else:
        return '(No image found)'
image_img.short_description = 'Thumb'
image_img.allow_tags = True

所以PhotoAdmin应该是这样的:

class PhotoAdmin(admin.ModelAdmin):
    fields = ["image",]
    list_display = ("image","image_img")


  def image_img(self):
        if self.image:
            return u'<img src="%s" />' % self.image.url 
        else:
            return '(No image found)'
    image_img.short_description = 'Thumb'
    image_img.allow_tags = True

撰写回答