2012-12-12 38 views
0

低於專賣店這個變量在變量名PROC的處理:使用Django模板中Javascript中的Django視圖生成的變量?

proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination], 
            stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0] 

我在Django模板的形式。每當用戶按下按鈕提交我想使用變量proc並顯示處理。我嘗試使用Django模板JavaScript中的變量proc,如下所示:

function popUp() { 
    var a = "{{proc}}" 
    document.write(a) 
} 
</script> 

但它只顯示空白頁面。我已經測試了變量直接調用html身體標記,它工作正常,但不適用於JavaScript。我做錯了什麼?

我打電話的彈出功能像這樣的Django模板是這樣的:

<form name="form1" action="/sync/" method="post" onsubmit="popUp()"> 

而且,我傳遞變量PROC在Django模板是這樣的:

return render_to_response('synced.html', {'final_result':final_list}, context_instance=RequestContext(request)) 
return render_to_response('thanks.html', {'proc':proc}, context_instance=RequestContext(request)) 

編輯: 爲了檢查,而不是將該變量傳遞到thanks.html我通過了可變PROCsynced.html並在模板中使用這樣的:

<th>Files in the server:</th> 
</tr> 
<td>{{ proc }}</td> 
<tr> 

和我的輸出是:

receiving incremental file list 0 0% 0.00kB/s 0:00:00 (xfr#0, to-chk=0/1) sent 20 bytes received 56 bytes 6.08 bytes/sec total size is 8,640 speedup is 113.68 
+0

你叫的'popUp'功能? – Ian

+0

我正在調用彈出式功能。 – user1881957

+0

嗯,我不確定爲什麼它是一個_blank_頁面,但在頁面渲染後使用'document.write'並不好 - 它會用你指定的任何東西覆蓋頁面......在你的情況'a'中。這意味着'a'由於某種原因是空的。此外,由於您正在提交表單,因爲將請求發送到瀏覽器進行「/ sync /」,並且響應可能因爲某種原因沒有任何內容而填充頁面,因此該頁面將被清除 – Ian

回答

0

,我建議你在做什麼是沒有錯的,但有更好的方法&技術已經被設計來解決你的這個用例。一些你可以嘗試的東西 -

  1. AJAX輪詢 - 使用客戶端計時器,你不斷地輪詢服務器有關它的狀態。
  2. COMET - 彗星是一種推技術。由於HTTP是一種拉式技術,因此您可以在服務器&客戶端之間建立持久連接,並讓服務器向您推送進度。

不是你要找的人,但希望這可以幫助回答...

+0

謝謝你的回答,我不太熟悉AJAX和COMET。使用簡單的javascript快速解決。 – user1881957

+0

'彗星'可能很複雜,但Ajax主要是JavaScript,它很容易。 –