获取Django views.py以返回并执行javascript

Ale*_*dra 9 django httpresponse django-views

所以我正在使用django和文件上传,我需要一个javascript函数在文件上传后执行.我在views.py中有一个文件上传处理程序,如下所示:

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.")
Run Code Online (Sandbox Code Playgroud)

我从http://djangosnippets.org/snippets/341/找到了一个django片段,并将HttpJavascriptResponse类放在我的views.py代码中.它看起来如下:

class HttpJavascriptResponse(HttpResponse):
    def __init__(self,content):
       HttpResponse.__init__(self,content,mimetype="text/javascript")
Run Code Online (Sandbox Code Playgroud)

但是,当我上传文件时,浏览器简单呈现"parent.Response_OK();" 在屏幕上,而不是实际执行JavaScript.Chrome会向我发出警告:"资源被解释为文档,但使用MIME类型text/javascript传输"

反正有没有得到views.py来执行脚本?

小智 9

更好的方法是将mime传递给HttpResponse对象.

return HttpResponse("parent.Response_OK()", mimetype="application/x-javascript")
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本的django中,`mimetype`已被[`content_type`](https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpResponse.__init__)取代.但是,这似乎不起作用,脚本呈现为纯文本而不是执行. (4认同)

Cha*_*ert 6

我相信这会奏效.

return HttpResponse("<script>parent.Response_OK();</script>")
Run Code Online (Sandbox Code Playgroud)

但是,您可能会考虑在这种情况下返回成功(200)状态代码,然后在父级中添加一些javascript附加到此子级的加载事件,并根据返回状态代码进行分支.这样,您就可以分离视图呈现代码和查看行为代码.