获取jinja2 groupby中的Max项目?

时间:2018-05-02 23:53:42

标签: flask jinja2

我正在尝试从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

2 个答案:

答案 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 }}

或者您可以在视图功能中执行groupbymax,并将最大项目直接传递给模板文件。

答案 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 }}