[Python] come creare un filtro personalizzato con jinja
Ciao a tutti, mi sto avvicinando a jinja, e vorrei creare un filtro personalizzato... Sto cercando di seguire l'esempio presente nella documentazione "Custom Filters": http://jinja.pocoo.org/docs/api/#writing-filters ma non sono riuscito a capire come funziona, vi riporto quello che ho scritto: --- # -*- coding: utf-8 -*- from jinja2 import Template, Environment from datetime import datetime def datetimeformat(value, format='%H:%M / %d-%m-%Y'): return value.strftime(format) environment = Environment() environment.filters['datetimeformat'] = datetimeformat mytemplate = Template("""author: {{ name|title }} written on: {{ now|datetimeformat }}""") print(mytemplate.render(name='pIeTro', now=datetime.now())) --- cosa sto sbagliando? grazie per l'aiuto Pietro signature.asc Description: This is a digitally signed message part. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come creare un filtro personalizzato con jinja
Ciao. Non so esserti di aiuto ma complimenti per la segnalazione. Non conoscevo questo jinja (anche difficile da scrivere) ma ad una prima occhiata mi piace molto :-) Il giorno 22 giugno 2011 10:02, Pietro Zambelli ha scritto: > Ciao a tutti, > > mi sto avvicinando a jinja, e vorrei creare un filtro personalizzato... > > Sto cercando di seguire l'esempio presente nella documentazione "Custom > Filters": > > http://jinja.pocoo.org/docs/api/#writing-filters > > ma non sono riuscito a capire come funziona, vi riporto quello che ho > scritto: > > --- > > # -*- coding: utf-8 -*- > from jinja2 import Template, Environment > from datetime import datetime > > def datetimeformat(value, format='%H:%M / %d-%m-%Y'): >return value.strftime(format) > > environment = Environment() > environment.filters['datetimeformat'] = datetimeformat > > mytemplate = Template("""author: {{ name|title }} > written on: {{ now|datetimeformat }}""") > > print(mytemplate.render(name='pIeTro', now=datetime.now())) > > --- > > cosa sto sbagliando? > > grazie per l'aiuto > > Pietro > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > -- Blog:http://zuccala.blogspot.com/ Twitter: http://twitter.com/#!/VittorioZuccala/ Buzz: http://www.google.com/profiles/nathanvi#buzz ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come creare un filtro personalizzato con jinja
In data mercoledì 22 giugno 2011 10:02:37, Pietro Zambelli ha scritto: > cosa sto sbagliando? Sbagliavo, perché bisognava caricare il template nel environment, nel casolo si voglia caricare da una stringa c'è il metodo "from_string"... vi riporto il codice funzionante. --- # -*- coding: utf-8 -*- from jinja2 import Template, Environment, PackageLoader from datetime import datetime def datetimeformat(value, format='%H:%M / %d-%m-%Y'): return value.strftime(format) environment = Environment() environment.filters['datetimeformat'] = datetimeformat mytemplate = environment.from_string("""author: {{ name|title }} written on: {{ now|datetimeformat }}""") print(mytemplate.render(name='pIeTro', now=datetime.now())) --- Buona giornata! Pietro signature.asc Description: This is a digitally signed message part. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
Super grazie Matteo per l'aiuto. Effettivamente la tua versione e' perfetta. Studiandola, ho un paio di domande (so che mi spiego molto male, scusami in anticipo): Quando crei le def anno_nato e eta passi nelle parentesi "lavoratore". In questo momento non stiamo creando le istanze, quanto dichiarando le funzioni nuove. In questo caso lavoratore non e' realmente l'argomento in quanto lavoratore non esiste no? Quello che intendo e' in che momento il codice assegna il valore a lavoratore, gia' che il dizionario e la lista usano "workers"... Non so se sono riuscito a spiegare le mie perplessits'. :( sono davvero niubbo! Il giorno 21 giugno 2011 19:35, Matteo Scotuzzi ha scritto: > > > 2011/6/21 Matteo Scotuzzi > >> [...] >> def eta(lavoratore): # per il lavoratore calcola l'eta' (usando la >> funzione `anno_nato` per estrarne l'anno) >> todaystring = str(datetime.now()) >> anno_actual = int(todaystring[:4]) >> c = anno_actual >> g = int(anno_nato(lavoratore)) #lavoratore adesso e' un numero >> calc = c - g >> [...] >> > > ovviamente ho sbagliato a correggere il commento nella penultima riga del > codice riportato qua sopra, che doveva restare: > g = int(anno_nato(lavoratore)) # g adesso e' un numero > > -- > Matteo Scotuzzi > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > -- Anjin WEB: http://www.anjinart.com –– BLOG: http://anjinart.blogspot.com/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
Il 22 giugno 2011 13:39, luca pellegrino ha scritto: > Quando crei le def anno_nato e eta passi nelle parentesi "lavoratore". In > questo momento non stiamo creando le istanze, quanto dichiarando le funzioni > nuove. In questo caso lavoratore non e' realmente l'argomento in quanto > lavoratore non esiste no? 'lavoratore' è il nome della variabile che contiene il valore del parametro passato. Nella parte inferiore, fa un loop (for i in workers). All'interno del loop richiama la funzione eta(i). All'interno della funzione 'eta' il valore del parametro 'i' è passato alla variabile 'lavoratore'. Diciamo anche che nella fattispecie quel codice non è il massimo della chiarezza, violando in questo modo una parte dello Zen di Python ed in particolare dove parla di "readability counts". Per ovviare: def eta(worker): ... for worker in workers: ... eta(worker) Ma è solo pura formalità. Ciao, Simone ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
2011/6/22 luca pellegrino > Super grazie Matteo per l'aiuto. Effettivamente la tua versione e' > perfetta. Studiandola, ho un paio di domande (so che mi spiego molto male, > scusami in anticipo): > > prego :) > Quando crei le def anno_nato e eta passi nelle parentesi "lavoratore". In > questo momento non stiamo creando le istanze, quanto dichiarando le funzioni > nuove. In questo caso lavoratore non e' realmente l'argomento in quanto > lavoratore non esiste no? > > in effetti in quella fase non sto passando niente alla funzione, la sto solo definendo, quindi "lavoratore" serve per avere un nome all'interno del corpo della funzione per l'argomento che passerò quando verrà effettivamente eseguita. Ciao -- Matteo Scotuzzi ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come creare un filtro personalizzato con jinja
Allora forse potrà interessarti anche Flask. :-) Paolo On Wed, 2011-06-22 at 10:52 +0200, Vittorio Zuccala' wrote: > Ciao. > Non so esserti di aiuto ma complimenti per la segnalazione. > Non conoscevo questo jinja (anche difficile da scrivere) ma ad una > prima occhiata mi piace molto :-) > > Il giorno 22 giugno 2011 10:02, Pietro Zambelli > ha scritto: > Ciao a tutti, > > mi sto avvicinando a jinja, e vorrei creare un filtro > personalizzato... > > Sto cercando di seguire l'esempio presente nella > documentazione "Custom > Filters": > > http://jinja.pocoo.org/docs/api/#writing-filters > > ma non sono riuscito a capire come funziona, vi riporto quello > che ho scritto: > > --- > > # -*- coding: utf-8 -*- > from jinja2 import Template, Environment > from datetime import datetime > > def datetimeformat(value, format='%H:%M / %d-%m-%Y'): >return value.strftime(format) > > environment = Environment() > environment.filters['datetimeformat'] = datetimeformat > > mytemplate = Template("""author: {{ name|title }} > written on: {{ now|datetimeformat }}""") > > print(mytemplate.render(name='pIeTro', now=datetime.now())) > > --- > > cosa sto sbagliando? > > grazie per l'aiuto > > Pietro > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > > > > -- > Blog:http://zuccala.blogspot.com/ > Twitter: http://twitter.com/#!/VittorioZuccala/ > Buzz: http://www.google.com/profiles/nathanvi#buzz > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python -- My blog: http://paolobernardi.wordpress.com signature.asc Description: This is a digitally signed message part ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come creare un filtro personalizzato con jinja
Ottimo. A questo punto una domanda la faccio io. Ma jinja serve per elaborare template solo per linguaggio HTML o qualsiasi? Posso utilizzarlo per creare dei files in LaTeX o con il linguaggio del Wiki aziendale? Il giorno 22 giugno 2011 14:19, Paolo Bernardi ha scritto: > Allora forse potrà interessarti anche Flask. :-) > > Paolo > > On Wed, 2011-06-22 at 10:52 +0200, Vittorio Zuccala' wrote: > > Ciao. > > Non so esserti di aiuto ma complimenti per la segnalazione. > > Non conoscevo questo jinja (anche difficile da scrivere) ma ad una > > prima occhiata mi piace molto :-) > > > > Il giorno 22 giugno 2011 10:02, Pietro Zambelli > > ha scritto: > > Ciao a tutti, > > > > mi sto avvicinando a jinja, e vorrei creare un filtro > > personalizzato... > > > > Sto cercando di seguire l'esempio presente nella > > documentazione "Custom > > Filters": > > > > http://jinja.pocoo.org/docs/api/#writing-filters > > > > ma non sono riuscito a capire come funziona, vi riporto quello > > che ho scritto: > > > > --- > > > > # -*- coding: utf-8 -*- > > from jinja2 import Template, Environment > > from datetime import datetime > > > > def datetimeformat(value, format='%H:%M / %d-%m-%Y'): > >return value.strftime(format) > > > > environment = Environment() > > environment.filters['datetimeformat'] = datetimeformat > > > > mytemplate = Template("""author: {{ name|title }} > > written on: {{ now|datetimeformat }}""") > > > > print(mytemplate.render(name='pIeTro', now=datetime.now())) > > > > --- > > > > cosa sto sbagliando? > > > > grazie per l'aiuto > > > > Pietro > > > > ___ > > Python mailing list > > Python@lists.python.it > > http://lists.python.it/mailman/listinfo/python > > > > > > > > > > -- > > Blog:http://zuccala.blogspot.com/ > > Twitter: http://twitter.com/#!/VittorioZuccala/ > > Buzz: http://www.google.com/profiles/nathanvi#buzz > > > > ___ > > Python mailing list > > Python@lists.python.it > > http://lists.python.it/mailman/listinfo/python > > -- > My blog: http://paolobernardi.wordpress.com > -- Blog:http://zuccala.blogspot.com/ Twitter: http://twitter.com/#!/VittorioZuccala/ Buzz: http://www.google.com/profiles/nathanvi#buzz ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come creare un filtro personalizzato con jinja
In data mercoledì 22 giugno 2011 14:24:53, Vittorio Zuccala' ha scritto: > Ottimo. > A questo punto una domanda la faccio io. > Ma jinja serve per elaborare template solo per linguaggio HTML o qualsiasi? > Posso utilizzarlo per creare dei files in LaTeX o con il linguaggio del > Wiki aziendale? Si, puoi utilizzarlo per qualsiasi "testo": HTML, XML, LaTex, C, C++, etc :-D Io lo sto utilizzando per farmi generare automaticamente del latex... all'interno del mio documento LaTex inserisco una cosa del tipo: {{ "../some.csv"|table(label='tab0',caption='Una bella tabella.') }} e questo mi genera automaticamente da un csv come questo: Name,Weight,Heigth Pippo,58.789,1.828 Pluto,16.983,0.608 una cosa come questa: \begin{table}[htb!] \scriptsize \centering \begin{tabular}{ ccc } Name & Weight & Heigth \\ Pippo & 58.789 & 1.828 \\ Pluto & 16.983 & 0.608 \\ \end{tabular} \caption{ Una bella tabella. } \label{ tab0 } \end{table} l'altro filtro che sto facendo è che mi generi un grafico con tutte le subfigure, con le immagini contenute in una cartella... Se la cosa può interessare, la metto su github... Buona giornata! Pietro signature.asc Description: This is a digitally signed message part. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
Grazie per le due risposte (a te e a Simozack) Quindi, se ho capito bene, lavoratore non viene mai definito direttamente, rimane vuoto fino a che nel ciclo for anni_cal sostituisce la i con lavoratore e lo cicla per ogni 1 di workers... Il giorno 22 giugno 2011 14:18, Matteo Scotuzzi ha scritto: > > > 2011/6/22 luca pellegrino > >> Super grazie Matteo per l'aiuto. Effettivamente la tua versione e' >> perfetta. Studiandola, ho un paio di domande (so che mi spiego molto male, >> scusami in anticipo): >> >> prego :) > > >> Quando crei le def anno_nato e eta passi nelle parentesi "lavoratore". In >> questo momento non stiamo creando le istanze, quanto dichiarando le funzioni >> nuove. In questo caso lavoratore non e' realmente l'argomento in quanto >> lavoratore non esiste no? >> >> in effetti in quella fase non sto passando niente alla funzione, la sto > solo definendo, quindi "lavoratore" serve per avere un nome all'interno del > corpo della funzione per l'argomento che passerò quando verrà effettivamente > eseguita. > > Ciao > > -- > Matteo Scotuzzi > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > -- Anjin WEB: http://www.anjinart.com –– BLOG: http://anjinart.blogspot.com/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
2011/6/22 luca pellegrino > Grazie per le due risposte (a te e a Simozack) > Quindi, se ho capito bene, lavoratore non viene mai definito direttamente, > rimane vuoto fino a che nel ciclo for anni_cal sostituisce la i con > lavoratore e lo cicla per ogni 1 di workers... > > possiamo dire che viene definito nella lista degli argomenti della funzione def eta(lavoratore): ^^ # definizione e che poi il valore gli viene assegnato quando la funzione viene chiamata anni_calc = eta(i) # il valore di i viene ^ # assegnato a "lavoratore" # nel corpo della funzione buon divertimento -- Matteo Scotuzzi ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Novizio, primo programma e problema
Grazie mille Il giorno 22 giugno 2011 16:08, Matteo Scotuzzi ha scritto: > 2011/6/22 luca pellegrino > >> Grazie per le due risposte (a te e a Simozack) >> Quindi, se ho capito bene, lavoratore non viene mai definito direttamente, >> rimane vuoto fino a che nel ciclo for anni_cal sostituisce la i con >> lavoratore e lo cicla per ogni 1 di workers... >> >> > possiamo dire che viene definito nella lista degli argomenti della funzione > def eta(lavoratore): > ^^ # definizione > > e che poi il valore gli viene assegnato quando la funzione viene chiamata > anni_calc = eta(i) # il valore di i viene > ^ # assegnato a "lavoratore" ># nel corpo della funzione > > buon divertimento > > -- > Matteo Scotuzzi > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > > -- Anjin WEB: http://www.anjinart.com –– BLOG: http://anjinart.blogspot.com/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python