2011-08-06 3 views
9

그래서 저는 django 및 파일 업로드와 함께 작업 중이므로 파일을 업로드 한 후에 실행하려면 javascript 함수가 필요합니다. 나는 다음과 같습니다 내 views.py에서 파일 업로드 핸들러가 있습니다Django views.py를 보내서 JavaScript를 반환하고 실행하십시오.

def upload_file(request): 
    form = UploadFileForm(request.POST, request.FILES) 
    if form.is_valid():   
     for f in request.FILES.getlist('fileAttachments'):  
      handle_uploaded_file(f) 
     return HttpJavascriptResponse('parent.Response_OK();') 
    else: 
     return HttpResponse("Failed to upload attachment.") 

을 그리고 http://djangosnippets.org/snippets/341/에서 장고 조각을 발견하고 내 views.py 코드에서 HttpJavascriptResponse 클래스를 넣어. 다음과 같습니다 :

class HttpJavascriptResponse(HttpResponse): 
    def __init__(self,content): 
     HttpResponse.__init__(self,content,mimetype="text/javascript") 

을 그러나, 나는 브라우저 간단한 렌더링 파일을 업로드 할 때 "parent.Response_OK를();" 실제로 자바 스크립트를 실행하는 대신 화면에 표시됩니다. 그리고 크롬은 나에게 경고 : "문서로 해석되었지만 MIME 형식 텍스트/자바 스크립트로 전송 된 리소스"

스크립트를 실행하기 위해 views.py를 사용할 수 있습니까?

답변

6

나는 이것이 효과가있을 것이라고 믿는다.

return HttpResponse("<script>parent.Response_OK();</script>") 

그러나 부모의 일부 자바 스크립트는이 아이의로드 이벤트에 첨부 가진 후,이 경우 성공 (200) 상태 코드를 반환하고, 생각하고, 지점 반환 상태 코드를 기반으로 수 있습니다. 이렇게하면 뷰 렌더링 코드와 뷰 동작 코드가 분리됩니다.

+0

코드는 작동하지만, 나는 당신의 충고를 받아와 아이가 성공 상태를 반환 할 때 부모의 자바 스크립트 트리거를 가지고 노력하겠습니다. 감사! – Alexandra

9

더 좋은 방법은 mime을 HttpResponse 객체에 전달하는 것입니다.

return HttpResponse("parent.Response_OK()", mimetype="application/x-javascript") 
+3

최근 버전의 django에서'mimetype'은 ['content_type'] (https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpResponse.__init__)로 대체되었습니다. 그러나이 방법은 작동하지 않으며 스크립트는 실행보다는 일반 텍스트로 렌더링됩니다. –

3
내가 파이썬 문자열에 넣어 걱정보다 좀 더 자바 스크립트를 실행해야하지만 체이스의 솔루션은 나를 위해 일한

:

from django.http import HttpResponse 
from django.contrib.staticfiles.templatetags import staticfiles 

... 
    return HttpResponse("<script src='{src}'></script>".format(
     src = staticfiles.static('/path/to/something.js'))) 
+1

이 솔루션은 스크립트를 실행 한 다음 일반 텍스트를 렌더링합니다. 스크립트를 실행하고 같은 페이지에 머물러있는 솔루션이 있습니까? – sidpat

+0

@sidpat도 동일한 작업을 수행해야합니다. 알아 냈어? – Anupam

+0

@sidpat, js에서 window.location.href = path/to/current/page를 사용하여 같은 페이지를 다시 가져오고 js를 실행합니다. – Anupam

0
나는 서비스를 제공하는 방법을 찾고 여기 결국

django을 사용하는 동적 js 파일입니다.

여기 내 솔루션입니다 :

return render(request, 'myscript.js', {'foo':'bar'}, 
         content_type="application/x-javascript") 
관련 문제