Получить Django views.py, чтобы вернуться и выполнить JavaScript - PullRequest
9 голосов
/ 06 августа 2011

Итак, я работаю с 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.")

И я нашел фрагмент django из http://djangosnippets.org/snippets/341/ и поместил класс 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 выполнить скрипт?

Ответы [ 4 ]

9 голосов
/ 22 ноября 2012

Лучший способ - передать mime объекту HttpResponse.

return HttpResponse("parent.Response_OK()", mimetype="application/x-javascript")
6 голосов
/ 06 августа 2011

Я верю, что это сработает.

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

Однако в этом случае вы можете подумать о возврате кода состояния успеха (200), а затем иметь некоторый javascript в родительском файле, присоединенный к событию загрузки этого дочернего элемента, и выполнить ветвление на основе кода состояния возврата.,Таким образом, у вас есть разделение кода визуализации представления и кода поведения представления.

3 голосов
/ 22 ноября 2015

Решение Чейза сработало для меня, хотя мне нужно выполнить больше 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')))
0 голосов
/ 20 ноября 2017

Я остановился здесь на поиске способа обслуживания файла динамического js с использованием django .

Вот мое решение:

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