Получить Макса в группе jinja2? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь получить максимальный элемент из группового оператора в jinaj2.

Например

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 голосов
/ 03 мая 2018

Вы можете определить свой собственный фильтр в приложении 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 }}
0 голосов
/ 03 мая 2018

Вы можете добавить расширение do в среде Jinja2 в своем приложении для колб.

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 в функции просмотра и напрямую передать элемент max в файл шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...