2017-05-27 91 views
-1

我有一個Python功能正常工作: -Python函數不是在神社模板

def lookup(symbol): 
    """Look up quote for symbol.""" 

    # reject symbol if it starts with caret 
    if symbol.startswith("^"): 
     return None 

    # reject symbol if it contains comma 
    if "," in symbol: 
     return None 

    # query Yahoo for quote 
    # http://stackoverflow.com/a/21351911 
    try: 
     url = "http://download.finance.yahoo.com/d/quotes.csv?f=snl1&s={}".format(symbol) 
     webpage = urllib.request.urlopen(url) 
     datareader = csv.reader(webpage.read().decode("utf-8").splitlines()) 
     row = next(datareader) 
    except: 
     return None 

    # ensure stock exists 
    try: 
     price = float(row[2]) 
    except: 
     return None 

    # return stock's name (as a str), price (as a float), and (uppercased) symbol (as a str) 
    return { 
     "name": row[1], 
     "price": price, 
     "symbol": row[0].upper() 
    } 

,我將其導入到我的神社模板有: -

app.jinja_env.globals.update(lookup = lookup) 

在一個正常的Python文件,這: -

print(lookup("NFLX")) 

產生輸出: -

{'price': 162.43, 'symbol': 'NFLX', 'name': 'Netflix, Inc.'} 

,但在我的模板,這樣的: -

{% set stock = lookup[info['stock']] %} 
{{stock['price']}} 

給出了一個錯誤: -

jinja2.exceptions.UndefinedError: 'function object' has no attribute 'AAPL' 

AAPL是信息[ '股票']的值,並且是蘋果公司的股票名稱。我在普通的python文件中運行相同的代碼,並運行它,我也嘗試運行另一個函數,它返回Jinja中的數字值,並運行(可能因爲它只是返回一個值)。爲什麼查找功能在模板中不起作用?

+1

以下工作? '{%set stock = lookup(info ['stock'])%}'注意圓括號而不是方括號。 –

+0

非常感謝您的先生!簡直不敢相信這麼愚蠢的錯誤! – firstlegagain1

回答

0

一個簡單的語法修復:

{% set stock = lookup(info['stock']) %} # round brackets for function calls 

別人:你試圖訪問value在「查找」 key「AAPL」作爲dict,這是一個函數對象,而不是一本字典