2010-07-03 80 views
1

我在我的服務器上有一個Python腳本和一個JS。在python腳本中,我想將變量的值設置爲我的.js文件中某個函數的輸出。在JavaScript文件中設置變量值

這是可能的,如果是這樣的話會怎麼做呢?

謝謝!

回答

4

作爲Macha建議(Ajax查詢)的替代方案,您也可以動態創建Javascript文件。

當頁面被加載時,JavaScript被加載。在你的頁面的URL的JavaScript在

<SCRIPT LANGUAGE="JAVASCRIPT" SRC="mycode.js" TYPE="TEXT/JAVASCRIPT"> 

訣竅形式現在讓服務器不服務於靜態文件「mycode.js」,但如輸出mycode.py。因此,你的標籤看起來像

<SCRIPT LANGUAGE="JAVASCRIPT" SRC="mycode.py" TYPE="TEXT/JAVASCRIPT"> 

和Python腳本看起來像可能(簡體):

var_value = "whatever you want the variable to be" 

jsfile = open("myscript.js", "rb") 
for line in jsfile: 
    print line.replace("$MYVAR$", var_value) 

jsfile.close() 

總之,你有你當前的js文件,但你會用它作爲python腳本的模板。你用你的變量替換它的值。

它可能不是最優雅的解決方案,但它應該工作,並不是很難理解。

不要忘記,你的服務器應該知道如何處理Python腳本:)

+1

只有一點:'language =「javascript」'多年來一直不需要。這對'type =「text/javascript」'是多餘的。 – Macha 2010-07-03 15:13:26

+0

實際上,除了'src'之外的所有屬性都不再需要了。 – 2010-07-03 18:52:29

+0

@Justin Johnson即使SRC指向一個python腳本?這意味着將分析URL的內容以檢查其包含的代碼類型。 – extraneon 2010-07-04 11:32:56

1

這是不可能的,因爲Javascript通常運行在客戶端,而Python運行在服務器端。

如果它是需要在客戶端運行的代碼,讓它發送一個AJAX請求到一個python腳本並提供你需要的結果。如果它不需要在客戶端運行,我建議你用Python重寫它。

+0

Thanks Macha!所以,我可以讓腳本運行客戶端,並遠程調用HTML或JS調用python嗎?我可以重寫Python腳本來返回一個值,我可以從我的HTML頁面或JS調用它,對吧? – 2010-07-03 14:31:22

+0

它必須將值打印到頁面上,而不僅僅是返回它,以便Javascript能夠讀取它。 – Macha 2010-07-03 14:33:52

1

您可以簡單地從你的Python腳本打印的JavaScript塊...並且在從外部腳本中使用這些塊設置變量。

<script language="javascript">var myvalue="data";</script> 

使用simplejson你甚至可以打印數組和類似的東西。

只要確保JavaScript文件中的代碼位於整個頁面加載後調用的函數中,或者在頁面末尾加載JavaScript文件。

0

如果您使用的是webpack,在不加載任何http請求的情況下在python和javascript文件之間共享變量的一種方式是將變量以yaml或json等可序列化的格式存儲,並使用yaml加載器將其解析到前端。

const.yaml

DAY_MON: MON 

DAYS: 
    - MON 
    - TUE 

MAP_CONTENT_TYPE_TO_EXTENSION: 
    image/gif: .gif 
    image/jpg: .jpg 

const.py

import yaml 
globals().update(yaml.load(open('./const.yaml'))) 
print DAY_MON 
print DAYS 
print MAP_CONTENT_TYPE_TO_EXTENSION 

# MON 
# ['MON', 'TUE'] 
# { 'image/gif': '.gif', 'image/jpg': '.jpg' } 

安裝裝載機解析YAML npm install yaml-loader

const.js

import data from "json-loader!yaml-loader!./const.yaml"; 
data.ANOTHER_VARIABLE = "SOME_VAR"; 
export default data; 

read.js

import constants from './const.js'; 

console.log(constants.ANOTHER_VARIABLE); 
console.log(constants.LISTING_TYPE_BRAND); 
console.log(constants.DAYS); 
console.log(constants.MAP_CONTENT_TYPE_TO_EXTENSION); 

// SOME_VAR 
// MON 
// ['MON', 'TUE'] 
// { 'image/gif': '.gif', 'image/jpg': '.jpg' }