तो जैसा कि मैं समझता हूँ कि अपने समस्या नहीं है गतिशील रूप से इस फाइल उत्पन्न कैसे है, लेकिन लोग इसे डाउनलोड करने के लिए एक लिंक बनाने ...
क्या मेरा सुझाव है निम्नलिखित है:
0) अपनी फ़ाइल के लिए एक मॉडल बनाने के लिए, यदि आप चाहते हैं इसे गतिशील रूप से फ़ाइलफ़ी का उपयोग न करें बड़ा, लेकिन केवल इस फ़ाइल को उत्पन्न करने के लिए आपको जो जानकारी चाहिए:
class ZipStored(models.Model):
zip = FileField(upload_to="/choose/a/path/")
1) अपना ज़िप बनाएं और स्टोर करें। यह कदम महत्वपूर्ण है, आप स्मृति में अपने ज़िप बनाते हैं और फिर FileField निर्दिष्ट करने के लिए यह डाली:
function create_my_zip(request, [...]):
[...]
# This is a in-memory file
file_like = StringIO.StringIO()
# Create your zip, do all your stuff
zf = zipfile.ZipFile(file_like, mode='w')
[...]
# Your zip is saved in this "file"
zf.close()
file_like.seek(0)
# To store it we can use a InMemoryUploadedFile
inMemory = InMemoryUploadedFile(file_like, None, "my_zip_%s" % filename, 'text/plain', file_like.len, None)
zip = ZipStored(zip=inMemory)
# Your zip will be stored!
zip.save()
# Notify the user the zip was created or whatever
[...]
2) एक ऐसा url बनाएं, उदाहरण के लिए एक नंबर आईडी मिलान मिलता है, आप भी एक का उपयोग कर सकते slugfield (this)
url(r'^get_my_zip/(\d+)$', "zippyApp.views.get_zip")
3) अब देखने के लिए, इस दृश्य आईडी यूआरएल में पारित मिलान फ़ाइल वापस आ जाएगी, तो आप भी आईडी के बजाय पाठ संदेश भेजने, स्लग उपयोग कर सकते हैं, और फ़िल्टरिंग प्राप्त करना अपने स्लगफील्ड द्वारा।
function get_zip(request, id):
myzip = ZipStored.object.get(pk = id)
filename = myzip.zip.name.split('/')[-1]
# You got the zip! Now, return it!
response = HttpResponse(myzip.file, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=%s' % filename
फ़ाइलवापर के स्रोत को देखते हुए, ऐसा लगता है कि यह केवल एक फ़ाइल स्वीकार करता है। मुझे नहीं पता कि फाइलों के माध्यम से लूपिंग send_zipfile स्निपेट – yretuta
फ़ाइलों के माध्यम से लूपिंग और उन्हें संग्रह में लिखने का तरीका है मेरे सिद्धांत में काम करेगा। –