Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Django ImageFields创建视图_Django_Image - Fatal编程技术网

为Django ImageFields创建视图

为Django ImageFields创建视图,django,image,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获取图像的url。但

我有以下带有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获取图像的url。但是,我想知道Django是否也实现了一些功能来自动托管该映像

我目前拥有的代码运行良好,但似乎是多余的:

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

您可以直接指向
媒体//graphics/
并让您的Web服务器自己为图像服务,而不是创建一个视图来为图像服务。Django不适合为静态文件提供服务,但另一方面,您的Web服务器旨在高效地处理这些文件。

您可以直接指向
媒体//graphics/
,让您的Web服务器自己为图像提供服务,而不是创建一个视图。Django不适合提供静态文件,但另一方面,您的Web服务器设计为能够高效地处理静态文件。

为什么要通过Django提供媒体文件?这应该由Web服务器完成。因此,如果您只是将文件放入/上载到Web服务器提供的路径,则不需要视图来显示图像。为什么要通过Django提供媒体文件?这应该由Web服务器完成。因此,如果您只是将文件放到/上传到Web服务器提供的路径,那么就不需要视图来显示图像。我不太确定如何做到这一点。据我所知,我将使用这些图像作为html元素。源属性必须指向URL,对吗?如何将html图像元素连接到我的Web服务器(即我的计算机硬件?)上?我不太确定该如何实现。据我所知,我将使用这些图像作为html元素。源属性必须指向URL,对吗?如何将html图像元素连接到我的Web服务器(即我的计算机硬件?)?
#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)