Django重命名上传的图片网址

时间:2016-09-14 07:03:28

标签: django url file-upload django-forms

我正在开发一个允许用户上传图片的项目。稍后将显示上传的图像并将其传递给另一个表单。为此,我需要获取上传图像的图像网址。这是我的代码:

def inputImage(request):
    if request.method == 'POST':
        form = ImageDetailsForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            message = "The image was successfully uploaded!"
            imageName = str(request.FILES['image'].name)
            imageURL = settings.MEDIA_URL + "/" + imageName
        return render(request,'success.html', {'message': message, 'image': imageURL})

代码正在运行,但是如果用户在存储上传文件中包含现有文件名,则会出现问题。为避免冲突,Django会自动重命名文件,但行

imageName = str(request.FILES['image'].name)

仅返回上传图像的原始文件名。我也尝试过使用

imageName = str(form.cleaned_data['image'].name)

但仍然没有变化。它返回“/ media // 1.png”而不是“/ media // 1_0rnKMaT.png”

关于如何在Django中获取当前上传的URL的任何想法?

编辑: 这是我的models.py:

class ImageDetails(models.Model):
    image = models.ImageField(null=True)

和我的forms.py

class ImageDetailsForm(forms.ModelForm):
    class Meta:
       model = ImageDetails
       fields= ('image')
       widgets = {
            'status': forms.HiddenInput(),
       }

1 个答案:

答案 0 :(得分:0)

您可以通过form.instance访问已保存的模型实例,因此您应该能够使用form.instance.image_field_name.name获取已保存文件的名称,其中image_field_name是图像字段的名称你的模特。