所以我正在使用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来执行脚本?
答案 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")