我正在尝试从jinaj2中的groupby语句中获取最大项目。
例如
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
data = [
{'var': 1, 'var2': 2},
{'var': 2, 'var2': 2},
{'var': 3, 'var2': 2},
{'var': 1, 'var2': 4},
{'var': 2, 'var2': 4},
{'var': 3, 'var2': 4},
]
return render_template('test.html', data=data)
if __name__ == '__main__':
app.run(debug=True)
{% for group in data|groupby('var2') %}
{{ group.grouper }} <br>
{% endfor %}
这只是打印
2
4
我希望只打印4
。
这种作品
{% set l = [] %}
{% for group in data|groupby('var2') %}
{{l.append(group.grouper)}}
<br>
{% endfor %}
{{ l|max}}
但它打印
None
None
4
答案 0 :(得分:0)
您可以在烧瓶应用中的Jinja2环境中添加do
扩展名。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
data = [
{'var': 1, 'var2': 2},
{'var': 2, 'var2': 2},
{'var': 3, 'var2': 2},
{'var': 1, 'var2': 4},
{'var': 2, 'var2': 4},
{'var': 3, 'var2': 4},
]
app.jinja_env.add_extension("jinja2.ext.do")
return render_template('test.html', data=data)
if __name__ == '__main__':
app.run(debug=True)
{% set l = [] %}
{% for group in data | groupby("var2") %}
{% do l.append(group.grouper) %}
{% endfor %}
{{ l | max }}
或者您可以在视图功能中执行groupby
和max
,并将最大项目直接传递给模板文件。
答案 1 :(得分:0)
您可以在Flask应用中定义自己的过滤器,然后在HTML模板中调用该过滤器,如下所示。请注意,您创建的函数名称必须与过滤器名称相同。
@app.route('/')
def index():
data = [
{'var': 1, 'var2': 2},
{'var': 2, 'var2': 2},
{'var': 3, 'var2': 2},
{'var': 1, 'var2': 4},
{'var': 2, 'var2': 4},
{'var': 3, 'var2': 4},
]
return render_template('test.html', data=data)
@app.template_filter()
def maximum(_list):
try:
return max(_list)[0]
except Exception as e:
print(str(e))
的test.html
{{ data|groupby('var2')|maximum }}