簡體   English   中英

如何在Jinja模板中調用Python函數並使用函數值返回的字典?

[英]How to call a Python function in Jinja template and use the returned dictionary from the functions values?

我有一個從文件讀取並返回d {1:'a',2:'b',3:'c'}字典的函數。

我想將此函數發送到模板,並能夠在我的jinja模板中調用此函數。

當我在Jinja模板中調用此函數時,我希望能夠在模板中使用返回的字典值。 我計划使用AJAX在模板中連續調用此函數,以便如果更改文件中的數據,即1:“ a”更改為1:“ f”,則模板中的連續函數調用將更新字典,在模板中使用。

從文件中檢索數據的函數稱為getdata(),該函數返回數據的字典。

我知道您可以使用.context_processor來使函數成為全局函數,並在模板中使用返回的值。

@app.context_processor
def utility_processor():
def format_price(amount, currency=u'$'):
  return u'{1}{0:.2f}'.format(amount, currency)
return dict(format_price=format_price)

然后您可以像這樣在模板中調用它。

{{ format_price(0.33) }}

輸出$ 0.33

是否有可能實現將函數發送到模板以及能夠調用上下文處理程序訪問模板中返回的字典中的特定值之類的功能? 像下面這樣。

@app.route('/')
def index():
return render_template('index.html')

@app.context_processor
def context_processor():
    return dict(datadict=getdata())

像這樣訪問字典中的第一個鍵。

{{ datadict.1 }}

這將輸出“ a”。

這樣的事情可能嗎?

是的,研究python 上下文對象 我建議使用django或flask之類的框架,以使自己更輕松地將數據從服務器端傳遞到客戶端。 如果沿着這條路線走,您將可以通過以下方式將數據帶到客戶端

@app.route('/')
def index():
data: {}
return render_template('index.html', data)

您可以創建自己的過濾器

from jinja2 import Environment

d = {1: 'a', 2: 'b', 3: 'c'}

env = Environment()
env.filters["myfilter"] = lambda k: d[k]

template = env.from_string("{{ val | myfilter }}")
print(template.render(val = 3))

版畫

c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM