[Python] generovat tabulku z listu s použitím Jinja templates – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

[Python] generovat tabulku z listu s použitím Jinja templates – Python – Fórum – Programujte.com[Python] generovat tabulku z listu s použitím Jinja templates – Python – Fórum – Programujte.com

 

itlady0
Newbie
23. 3. 2022   #1
-
0
-

Ahoj. Jak mám pomocí jinja template vygenerovat tabulku, která se bude dynamicky plnit z pythonu listu?

To, co už mám, mi vypíše jen poslední záznam z listu.

Můj kód

def generuj_prehled():
     env = Environment(loader=FileSystemLoader(''))
     tpl = env.get_template(template2)
     for row in data:
         if zs in row[5]:
             table_data = row
     html = tpl.render(page_title_text = "Přehled dětí",
                       title_text = "Základní škola " + zs,
                       headings=sloupce,
                       data=table_data)
     with open(output2, 'w') as f:
     f.write(html)
 
<html>
   <head>
     <title>{{page_title_text }}</title>	
   </head>
   <body>
     <h1>{{ title_text }}</h1>
     <table border="1">
       <tr> 
	  {% for header in headings %}	
	  <th> {{ header }}</th>
	  {% endfor %}
       </tr>	
       <tr>
    	{% for item in data %}
	  <td>{{ item }}</td>
	{% endfor %}
       </tr>
     </table>
  </body>
</html>

sloupce = ('id', 'jméno', 'příjmení', 'bydliště', 'datum narození', 'základní škola')

Data, která přijdou do tabulky, zde ukázka, celkem jsou to desítky listů:

['67', 'Tereza', 'Antlová', 'Maxima Gorkého', '2015/11', 'Čapkova']
['182', 'Adam', 'Babka', 'Habartice', '2016/5', 'Čapkova']
['267', 'Lera Hann', 'Baran', 'Maxima Gorkého', '2014/11', 'Čapkova']

Při vygenerování tabulky v html se mi ukáže pouze poslední z listů.

Nahlásit jako SPAM
IP: 185.246.210.–
Pavel
~ Anonymní uživatel
371 příspěvků
23. 3. 2022   #2
-
0
-

#1 itlady
Ten cyklus běží přes všechny řádky, ale pořád si přepisuje proměnnou table_data, na konci tam bude jen ten poslední řádek.

Nahlásit jako SPAM
IP: 46.13.186.–
gna
~ Anonymní uživatel
1730 příspěvků
24. 3. 2022   #3
-
0
-

   

table_data = []
for row in data:
    if zs in row[5]:
        table_data.append(row)

Nebo úsporněji: 

table_data = [row for row in data if zs in row[5]]

Ale to už napsal Pavel. Já jsem chtěl doplnit, že i v té šabloně renderuješ jen jeden řádek.

{% for row in data %}
  <tr>
  {% for cell in row %}
    <td>{{ cell }}</td>
  {% endfor %}
  </tr>
{% endfor %}
Nahlásit jako SPAM
IP: 213.211.51.–
itlady0
Newbie
24. 3. 2022   #4
-
0
-

Děkuju za rady, už to funguje.   

Nahlásit jako SPAM
IP: 185.246.210.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Editace listu listů — založil Matěj Andrle

Templates — založil BigBear

Generovať word dokument do php — založil juraj175

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý