2012-05-21 22 views
5

Django'yu kullanarak, bazı verileri karşıdan yüklemek için kullanılabilir hale getirmek istiyorum.javascript/jQuery ile indirmek için django ile bir dosya oluşturma

My jQuery çağrı bugüne kadar şuna benzer:

$.getJSON("/get_data", 
      { users: users, study: "{{study.id}}" } , 
      function(json){ 
       alert('some data!'); 
      } 
); 

Bu da bazı JSON üretir benim Django görünümleri, birini çağırır ve bir dosyada JSON metin indirmek için emin olmak için çalışır

jsonResponse = json.dumps(data, cls=DjangoJSONEncoder) 

jsonFile = cStringIO.StringIO() 
jsonFile.write(jsonResponse) 

response = HttpResponse(jsonFile, mimetype='application/json') 
response['Content-Disposition'] = 'attachment; filename=data.txt' 

return response 

Ancak, bu çalışmaz. Bir süredir etrafa baktıktan sonra, her iki ucunda da bir şeyi değiştirmem gerektiğine inanıyorum - Javascript ve python/Django kodu - ama tam olarak ne olduğumu açıklamıyorum.

Python için asıl ilgim cStringIO kullanımında (özellikle de "ValueError: G/Ç işlemi kapalı dosyaya" sormadan dönmeden önce jsonFile'da çalışamadığım gerçeği.).

Belki de bir FileWrapper kullanıyorum (bu post'da olduğu gibi), ancak ben ve onlarla aynı sonuçları elde ediyorum.

Javascript için, başarı işleyici işlevime ne gireceğinden emin değilim.

Herhangi bir işaretçi çok takdir edilecektir!

+0

sizin sayfada sizin views.py

def getFile(request): fileContent = "Your name is %s" % request.GET['name'] res = HttpResponse(fileContent) res['Content-Disposition'] = 'attachment; filename=yourname.txt' return res 

yılında urls.py

url(r'^test/getFile', 'getFile') 

veya Javascript kullanımı için JSON verilerini göndermek ister misiniz? – xbtsw

+0

Eski - Bir "kaydet" tarayıcı iletişim kurmak istiyorum (ki benim anlayışından, "Content-Disposition" üstbilgisi ile ne olmalıdır, doğru?) – arturomp

+0

@amp, bu bir _download_ yerine zorlar tarayıcı içi oluşturma. Bir kaydetme dosyasını zorlamak, yapabileceğimiz bir şey gibi görünmüyor ... örneğin indirmelerimin tümü doğrudan indirme dizinine gidiyor. Google aramaları benzer ifadeleri gösteriyor ... –

cevap

7

Bunun için klasik çözüm gizli bir iframe kullanmaktır. Gelen

senin Sen (kaydetmek iptal çalıştırın) kullanıcı dosya indirme iletişim bkz istiyorum

<script type="text/javascript"> 
    var data = {name: 'Jon'}; 
    $(function(){ 
     $("body").append('<iframe src="/test/getFile?'+ $.param(data) + '" style="display: none;" ></iframe>'); 
    }); 
</script> 
İlgili konular