[Python] come creare un filtro personalizzato con jinja

2011-06-22 Per discussione Pietro Zambelli
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

2011-06-22 Per discussione Vittorio Zuccala'
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

2011-06-22 Per discussione Pietro Zambelli
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

2011-06-22 Per discussione 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):

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

2011-06-22 Per discussione simozack
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-06-22 Per discussione Matteo Scotuzzi
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

2011-06-22 Per discussione Paolo Bernardi
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

2011-06-22 Per discussione Vittorio Zuccala'
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

2011-06-22 Per discussione Pietro Zambelli
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

2011-06-22 Per discussione 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...



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-06-22 Per discussione Matteo Scotuzzi
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

2011-06-22 Per discussione luca pellegrino
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