为Django ImageFields创建视图

时间:2012-03-18 01:50:29

标签: django image

我有以下带有ImageField的django模型:

class Pics(models.Model):
    def file_path(instance, filename):
        return '/'.join([instance.user.username, 'pics', filename])
    #...
    file = models.ImageField(upload_to=file_path)

我知道我可以调用 pic.file.url 来获取图片的网址。但是,我想知道Django是否还实现了一些自动托管该图像的功能?

我目前的代码工作正常,但似乎多余:

#urls.py
    urlpatterns += patterns('views',
         url(r'media/(?P<name>\w{1,30})/pics/(?P<file>[^\\/:*?\"<>|]+)$', 'show_pic'),)

然后我的观点是:

#app.views
import mimetypes
def show_pic(request, name, file):
     path = u'media/%s/graphics/%s' % (name, file)
     mime = mimetypes.guess_type(name)[0]
     image_data = open(path, 'rb').read()
     return HttpResponse(image_data, mimetype=mime)

1 个答案:

答案 0 :(得分:5)

您可以直接指向media/<name>/graphics/<file>并让您的网络服务器自身为图片提供服务,而不是创建视图来提供图片。 Django不太适合提供静态文件,但另一方面,您的网络服务器旨在有效地处理它们。