2017-05-27 6 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() 
    } 

と私は私の神社テンプレートにインポート: - 、この通常のpythonファイルで

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

: -

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で数値のusd値を返す別の関数を実行しようとした(おそらく単なる値を返すため)実行されます。検索機能がテンプレートで機能しないのはなぜですか?

+1

以下は機能しますか? '{%set stock = lookup(info ['stock'])%}'角括弧ではなく、丸かっこに注意してください。 –

+0

ありがとうございました!そんなばかげたミスを信じられない! – firstlegagain1

答えて

0

単純な構文を修正し、他の

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

:あなたは関数オブジェクトではなく、辞書

ある dict、として「検索」で key「AAPL」の valueにアクセスしようとしています
関連する問題