Cómo imprimir datos con la misma situación en inmersiones separadas a través de un bucle for en la plantilla del matraz

Hay una tabla como esta en mi base de datos:

------------------------------------- . id . part . text . ------------------------------------- . 1 . 1 . different text . . 2 . 1 . different text . . 3 . 1 . different text . . 4 . 1 . different text . . 5 . 2 . different text . . 6 . 2 . different text . . 7 . 3 . different text . . 8 . 3 . different text . . 9 . 3 . different text . . 10 . 3 . different text . . 11 . 3 . different text . . 12 . 4 . different text . . 13 . 4 . different text . . 14 . 5 . different text . . 15 . 5 . different text . ------------------------------------- 

En app.py, result2 contendrá algo como esto: (una lista de tuplas)

((1, 1, ‘texto’), (2, 1, ‘texto’), (3, 1, ‘texto’), (4, 1, ‘texto’), (5, 2, ‘texto’) , (6, 2, ‘texto’), (7, 3, ‘texto’), (8, 3, ‘texto’), etc.)

 @app.route('/shop/') def shop(data): db =MySQLdb.connect("localhost","myusername","mypassword","mydbname" ) cursor = db.cursor() cursor2 = db.cursor() query_string = "SELECT * from p_div_chest1" query_string2 = "SELECT * from p_div_content1" cursor.execute(query_string) cursor2.execute(query_string2) result = cursor.fetchall() result2 = cursor2.fetchall() db.close() return render_template('shop.html', result=result, result2=result2) 

Ahora en shop.html quiero tener un bucle for para imprimir todo el texto con sus mismos números de part en una

separada.

Por ejemplo, todo el texto donde sus números de part es 1 debe imprimirse en un div separado.

Y todo el texto con el número de part 2 debe ir a la siguiente etiqueta div separada.

Por ejemplo:

Es como si seleccionara * de la tabla where part = 1 e imprima en la primera etiqueta div . La salida se vería como:

 -------------------- - different text - - different text - - different text - - different text - -------------------- 

y luego selecciono * de la tabla where part = 2 e imprimo en la primera etiqueta div . La salida se vería como:

 -------------------- - different text - - different text - -------------------- 

shop.html es así por ahora:

 {% for each in result2 %} {{ each }}
{% endfor %}

Quiero poner algo como {%if each.1 == 1 %} en ese for for para comprobar cada.1 cada vez, y si each.1 == 1 , for loop comienza a imprimir textos en la primera división y listo encendido hasta each.1 == 2 , luego cierre la última etiqueta div y abra la siguiente etiqueta div para imprimir todos los textos que sean iguales a each.1 == 2 y continúe …

Espero que mi explicación ayude más.

Le sugeriré que mantenga su plantilla lo más limpia posible, y ponga toda la lógica en su vista, primero use itertools.groupby para agrupar los elementos en listas separadas para facilitar la impresión, los elementos en result2 ya están ordenados para que no es necesario ordenarlos de nuevo, si no están ordenados, groupby no funcionará

 from itertools import groupby x = [(1, 1, 'text'), (2, 1, 'text'), (3, 1, 'text'), (4, 1, 'text'), (5, 2, 'text'), (6, 2, 'text'), (7, 3, 'text'), (8, 3, 'text')] result2 = [list(value) for key, value in groupby(x, lambda y: y[1])] 

con el código en bruto de Python, tenemos este

 for elems in result: print('
') for elem in elems: print(elem) print('
')

Salida

 
(1, 1, 'text') (2, 1, 'text') (3, 1, 'text') (4, 1, 'text')
(5, 2, 'text') (6, 2, 'text')
(7, 3, 'text') (8, 3, 'text')

Así que traduciendo eso para jinja tenemos esto

 {% for elems in result2 %} 
{% for elem in elems %} {{ elem }} {% endfor %}
{%endfor%}