从django的Imagefield上传图片

时间:2014-12-24 23:02:20

标签: python django django-file-upload django-media

我是Django的新手。我的html文件中有以下代码:

{% load staticfiles %}
<form method="post"> {% csrf_token %}
<input type="file" name="file">
<button>Submit</button>
</form>
{{file}}
<img class="hl" src="{{ MEDIA_URL }}photos/abc.png" /></a>
<img class="hl" src="{% static 'blog/images/sec.png' %}" /></a>

以及上述代码的views.py是:

if request.method == 'POST':
        if 'file' in request.POST:
            f = request.POST['file']
            a = MyUser(email="frt@wer.com", date_of_birth=date.today())
            a.photo.save('somename.png', File(open(f, 'r')))
            a.save()
            context = {'file': f}
            return render(request, 'home.html', context)

现在浏览器不会从用户的本地设备返回文件的绝对路径,它只是收集文件名,因为有些security issues但是a.photo.save('somename.png', File(open(f, 'r')))我的代码的这部分需要用户本地设备的绝对路径我得到的/home/abc/Pictures/sec.png之类的内容是sec.png,因此我无法上传。

来自python manage.py shell

>>>a = MyUser(email="frt@wer.com", date_of_birth=date.today())
>>>a.photo.save('somename.png', File(open('/home/abc/Pictures/sec.png', 'r')))
>>>a.save()

这很好用。有一些解决方法。我不想使用Form

1 个答案:

答案 0 :(得分:2)

我建议如果你想允许文件上传你使用文件表单而不是解决方法。这里有一个简单而简洁的例子:

Need a minimal Django file upload example