2011-08-06 16 views
9

yürütmek için Django views.py alın Django ve dosya yüklemeleri ile çalışıyorum ve dosya yüklendikten sonra yürütmek için bir javascript işlevine ihtiyacım var. Şöyle benim views.py bir dosya yükleme işleyicisi vardır:Geri Dön ve javascript

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.") 

Ve http://djangosnippets.org/snippets/341/ bir Django parçacık bulundu ve benim views.py kodunda HttpJavascriptResponse sınıfını koydu. aşağıdaki gibi görünüyor:

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

Ancak, tarayıcı basit hale getiren bir dosyayı yüklerken "parent.Response_OK();" Aslında javascript'i yürütmek yerine ekranda. Ve Chrome bana şu uyarıyı veriyor: "Belge olarak yorumlanmış ancak MIME türü metin/javascript ile aktarılmış kaynak"

Komut dosyasını yürütmek için views.py dosyasını almak için herhangi bir yol var mı?

cevap

6

Bunun işe yarayacağını düşünüyorum.

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

Ancak, ebeveyn bazı javascript bu çocuğun yük olayına takmak zorunda o zaman bu durumda bir başarı (200) durum kodu dönen ve düşün ve şube dönüş durumu koduna göre olabilir. Böylelikle görüntüleme işleme kodunu ayırıp davranış kodunu görüntüleyebilirsiniz.

+0

kod çalışır, ama senin tavsiye almak ve çocuk başarı durumunu döndüğünde ebeveynin javascript tetiği sahip deneyeceğim. Teşekkürler! – Alexandra

9

Mime'yi HttpResponse Nesnesine iletmenin daha iyi bir yolu vardır.

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

Django'nun son sürümlerinde, 'mimetype' [' content_type'] ile değiştirildi (https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpResponse.__init__). Ancak, bu işe yaramaz ve betik yürütmek yerine düz metin oluşturur. –

3
Bir piton dize koymak için bakım daha daha javascript yürütmek gerekiyor olsa Chase'in çözümü, benim için çalıştı

:

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

Bu çözüm, komut dosyasını çalıştırır ve ardından düz bir metin oluşturur. Komut dosyasını çalıştıran ve aynı sayfada kalan bir çözüm var mı? – sidpat

+0

@sidpat'ın aynısını yapması gerekiyor. Bunu çözebildin mi? – Anupam

+0

@sidpat, Aynı sayfayı geri almak ve js'yi çalıştırmak için js'de window.location.href = yol/to/current/page kullandım – Anupam

0
Ben hizmet etmek bir yol arıyoruz burada bitti

Django kullanarak dinamik js dosyası.

İşte benim çözüm:

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