2012-05-21 2 views
5

Django를 사용하여 다운로드 할 수있는 데이터를 만들고 싶습니다.javascript/jQuery로 다운로드 할 django 파일 생성

내 jQuery를 호출은 지금까지 다음과 같습니다

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

이 차례로 어떤 JSON을 생성 내 장고보기 중 하나를 호출하고 파일에 JSON 텍스트 다운로드 있는지 확인하려고

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 

그러나 이것은 작동하지 않습니다. 잠시 둘러보고 난 후에 자바 스크립트와 Python/Django 코드 양쪽에서 뭔가를 바꿔야한다고 생각합니다. 그러나 정확히 무엇이 명확하지 않은 것 같습니다.

파이썬의 주요 관심사는 cStringIO입니다 (특히 jsonFile에서 "ValueError : I/O 작업을 닫힌 파일에 대해 프롬프트하지 않고 돌아 오기 전에 close를 실행할 수 없다는 사실").

아마도 FileWrapper (이 post에서와 같이)를 사용해야하지만 어쨌든 동일한 결과가 있거나없는 동일한 결과를 얻습니다.

Javascript의 경우, 내 성공 처리기 기능에 무엇이 있어야하는지 잘 모르겠습니다.

모든 포인터가 크게 감사하겠습니다!

+0

페이지에 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 

에서 urls.py

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

또는 단순히 자바 스크립트 사용을위한 JSON 데이터를 보내시겠습니까? – xbtsw

+0

전 - 전 "저장"브라우저 대화 상자가 나타나게하고 싶습니다. (제 이해에서 "Content-Disposition"헤더로 올바르게 수행해야합니까?) – arturomp

+0

@amp, _ampload와는 반대로 브라우저 내 렌더링. 저장 파일을 강요하면 우리가 할 수있는 것처럼 보이지 않습니다 ... 예를 들어 모든 다운로드가 내 다운로드 디렉토리로 곧바로 들어갑니다. 구글 검색은 비슷한 진술을 공개 ... –

답변

7

일반적인 해결책은 숨겨진 iframe을 사용하는 것입니다. 에서

당신의 당신은 (저장 취소 실행) 사용자가 파일 다운로드 대화 상자가 표시 갖고 싶어

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