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

获取Django views.py以返回并执行javascript,django,django-views,httpresponse,Django,Django Views,Httpresponse,因此,我正在处理django和文件上传,我需要一个javascript函数在文件上传后执行。 我在my views.py中有一个文件上载处理程序,如下所示: def upload_file(request): form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): for f in request.FILES.getlist('fileAttachments

因此,我正在处理django和文件上传,我需要一个javascript函数在文件上传后执行。 我在my 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.")
我从中找到了一个django代码段,并将HttpJavascriptResponse类放入了我的views.py代码中。情况如下:

class HttpJavascriptResponse(HttpResponse):
    def __init__(self,content):
       HttpResponse.__init__(self,content,mimetype="text/javascript")
但是,当我上传文件时,浏览器会在屏幕上呈现“parent.Response_OK();”而不是实际执行javascript。Chrome给了我一个警告:“资源被解释为文档,但使用MIME类型text/javascript传输”


是否需要获取views.py来执行脚本?

我相信这会奏效

return HttpResponse("<script>parent.Response_OK();</script>")
返回HttpResponse(“parent.Response_OK();”)

但是,在本例中,您可能会考虑返回一个成功(200)状态代码,然后让父级中的一些javascript附加到此子级的加载事件,并基于返回状态代码进行分支。这样就可以将视图呈现代码和视图行为代码分开。

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

请参阅文档:

注意-Django的一些早期版本使用了
mimetype
而不是
content\u type

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

Chase的解决方案对我来说很有效,但我需要执行比python字符串更多的javascript:

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')))
从django.http导入HttpResponse
从django.contrib.staticfiles.templatetags导入静态文件
...
返回HttpResponse(“.”格式(
src=staticfiles.static('/path/to/something.js'))

我在这里寻找一种使用django提供动态js文件的方法

以下是我的解决方案:

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

代码是有效的,但我将接受您的建议,并尝试在孩子返回成功状态时触发家长的javascript。谢谢在django的最新版本中,
mimetype
已被替换为。但是,这似乎不起作用,脚本呈现为纯文本而不是执行。此解决方案运行脚本,然后呈现纯文本。有没有一种解决方案可以运行脚本并保持在同一页面上?@sidpat也需要这样做。你找到答案了吗?@sidpat,我使用js中的window.location.href=path/to/current/page返回相同的页面并运行js
return render(request, 'myscript.js', {'foo':'bar'},
                        content_type="application/x-javascript")