There's no direct way to save the contents of a URL to a Django File field: you're required to use a File instance but those can only safely wrap normal files, not the file-like object returned by urllib2.urlopen. Several examples online use urllib.urlretrieve() which creates a temporary file but performs no error handling without writing a ton of hackish code.
This demonstrates how to create a NamedTemporaryFile, fill it with the URL contents and save it, all using APIs which raise exceptions on errors.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# The file reference must be populated with a django.core.files.File instance # but File cannot handle file-like objects such as those returned by urlopen - # see http://code.djangoproject.com/ticket/8501 # # Since we'd like to get the normal file name collision avoidance, automatic # location handling, etc. we'll create a django NamedTemporaryFile because the # default file storage save logic is smart enough to simply move the temporary # file to the correct location. from django.core.files import File from django.core.files.temp import NamedTemporaryFile img_temp = NamedTemporaryFile(delete=True) img_temp.write(urllib2.urlopen(url).read()) img_temp.flush() im.file.save(img_filename, File(img_temp))
More like this
- Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 3 months ago
- Python Django CRUD Example Tutorial by tuts_station 3 months, 2 weeks ago
- Browser-native date input field by kytta 5 months ago
- Generate and render HTML Table by LLyaudet 5 months, 1 week ago
- My firs Snippets by GutemaG 5 months, 2 weeks ago