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

时间:2011-08-06 01:45:07

标签: django django-views httpresponse

所以我正在使用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.")

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

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

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

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

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:6)

我相信这会奏效。

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

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

答案 2 :(得分:3)

Chase的解决方案对我有用,虽然我需要执行更多的javascript,而不是放在python字符串中:

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')))

答案 3 :(得分:0)

我最终在这里寻找使用django 提供动态js文件的方法。

这是我的解决方案:

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