作为Django的新手,我在Django 1.3中制作上传应用程序时遇到了困难.我找不到任何最新的示例/代码段.可能有人发布了一个最小但完整的(模型,视图,模板)示例代码吗?
好吧,我已经尝试了几乎所有的东西,我无法让它工作.
我已经用6种不同的方式编写了这段代码.
我遇到的问题是我写的所有代码都会导致以下行为:(1)Django将生成第二个文件,(2)重命名新文件,在文件末尾添加_ name,然后(3)不传输任何数据,基本上是一个空的重命名文件.'upload_to'路径中剩下的是2个文件,一个是实际图像,一个是图像的名称,但是是空的,当然ImageField路径设置为Django尝试创建的空文件.
如果不清楚,我会试着说明:
## Image generation code runs....
/Upload
generated_image.jpg 4kb
## Attempt to set the ImageField path...
/Upload
generated_image.jpg 4kb
generated_image_.jpg 0kb
ImageField.Path = /Upload/generated_image_.jpg
Run Code Online (Sandbox Code Playgroud)
如果Django没有尝试重新存储文件,我怎么能这样做呢?我真正喜欢的是这个效果......
model.ImageField.path = generated_image_path
Run Code Online (Sandbox Code Playgroud)
......但当然这不起作用.
是的,我已经经历这里的其他问题,如走了这一个,以及对Django的DOC 文件
更新 进一步测试后,它只在Windows Server上的Apache下运行时才会出现此问题.在XP上的"runserver"下运行时,它不会执行此行为.
我很难过.
这是在XP上成功运行的代码...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()
Run Code Online (Sandbox Code Playgroud) 这是在杀我!
我正在使用django-filebrowser,我想创建一个图库应用程序,利用它的上传功能来管理图像.
我有一个Gallery模型,允许用户在服务器上选择或创建目录,并将文件上传到该文件夹以显示在库中.我想自动搜索用户已将图像上传到的目录,然后选择该目录,然后自动为该文件夹中的每个图像创建图像实例.
class Gallery(model.Models):
gallerydirectory = FileBrowserField(...)
title = ...
description ...
class Image(model.Models):
image_field = models.ImageField()
Run Code Online (Sandbox Code Playgroud)
问题是FileBrowser表示图像与Django不同,但我想使用DJango ImageFields,因为我可以在模板端使用其他应用程序(sorl缩略图).
我有文件所需的所有数据,即文件名,路径等,我只是无法让Django创建一个ImageField的实例,而无需再次实际上传图像.我只是想填充它.
我在这里看到另一个提示如下的线程:
for image in filebrowser_image_objects_list:
f = File(open('path-to-file-on-server','r'))
i = Image()
i.image_field('filename.png',f.read())
Run Code Online (Sandbox Code Playgroud)
但这给了我一个:
SuspiciousOperation error
Attempted access to '/filename.png' denied
Run Code Online (Sandbox Code Playgroud)
这表明路径没有被正确读取.我打印了文件对象的属性,它正在打开正确的图像,它只是没有被传递到ImageField
帮助将非常感谢!
UPDATE
我已经放弃了尝试这项工作,因为它太乱了.我上面遇到的问题是我将ImageField的upload_field设置为'/'并且它没有被注意到意味着该文件被写入'/something.png'.
我已对其进行了修改,以便Image现在也使用FileBrowserField而不是ImageField.
以下代码在保存后拍摄图像并从中制作缩略图:
class Image(models.Model):
image = models.ImageField(upload_to='images')
thumbnail = models.ImageField(upload_to='images/thumbnails', editable=False)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
if self.image:
from PIL import Image as ImageObj
from cStringIO import StringIO
from django.core.files.uploadedfile import SimpleUploadedFile
try:
# thumbnail
THUMBNAIL_SIZE = (160, 160) # dimensions
image = ImageObj.open(self.image)
# Convert to RGB if necessary
if image.mode not in ('L', 'RGB'): image = image.convert('RGB')
# create a thumbnail + use antialiasing for a smoother thumbnail
image.thumbnail(THUMBNAIL_SIZE, ImageObj.ANTIALIAS)
# fetch image into memory
temp_handle = …Run Code Online (Sandbox Code Playgroud)