[Python] Dubbio con Django
Valerio Maggio
valerio.maggio a gmail.com
Sab 24 Ago 2013 10:49:33 CEST
2013/8/24 Carlos Catucci <carlos.catucci a gmail.com>
> In pratica io da un template principale devo includere un blocco di html.
> Normalmente basta fare un {% include path.to.template %} per avere cio che
> serve.
> Pero' il mio e' un caso particolare, in quanto il pezzo incluso:
>
> .primo e' di un diverso module
>
Ok, ma questo non è un caso molto particolare :P
Spesso succede - in generale dipende da come è stata progettata l'app
Django (intendo, se template aware o no)
> .scecondo deve anche avere delle variabili valorizzate, specifiche del suo
> modulo.
>
ok.
Il punto è: le variabili ad un template sono passate dalla/e view/s a cui
questo è associato.
Le alternative che vedo sono due:
a) Aggiungi le variabili che ti servono al contesto che ritorni dalla view
che renderizza il "tuo" template principale - quello che deve includere il
template di terze parti, per intenderci
[
https://docs.djangoproject.com/en/1.5/ref/templates/api/#django.template.Context
]
[
https://docs.djangoproject.com/en/1.5/ref/templates/api/#django.template.RequestContext
]
b) Metti una pezza modificando il template originale dell'app che devi
includere con un templatetags.
Precisamente direi un *Inclusion tag* (
https://docs.djangoproject.com/en/1.5/howto/custom-template-tags/#inclusion-tags)..
ma ho capito ben poco del tuo problema specifico.
Forse potrebbe non essere nemmeno veramente necessario.
Ti dico anche che, se la app di terze parti che vuoi includere è stata
progettata per bene, non dovresti modificare proprio nulla :)
>
> So che si possono usare i custom template tag, ho provato a scriverne uno,
> mas incontro due tipi di problema.
> Il primo e' se sposto la cartella templatetags dentro la templates del
> progetto, nel qual caso posso includere il pezzo di codice ma non esegue la
> call del custom tag.
>
Questa non è una buona idea:
https://docs.djangoproject.com/en/1.5/howto/custom-template-tags/#code-layout
> Siccome la templatetags dovrebbe invece risiedere dentro il modulo, se la
> sposto ottemgo un errore di remplate non trovato se cerco di importare.
>
> Ho provato a aggiungere la directory modulo/templatetags nel TEMPLATE_DIRS
> ma senza successo.
>
Questo è proprio sbagliato!
Quello che devi fare (per certo) è aggiungere alle TEMPLATE_DIRS, la
cartella che contiene i templates dell'altra applicazione (app1 nel tuo
esempio).
Difatti, questa è la ragione per cui ti dicevo che "non è poi così strano
includere un template di un'altra applicazione" - dipende dalla
progettazione dell'App (come dicevo).
Se la progettazione non prevede una organizzazione "templatedir-centrica"
(passami il neologismo), ma hai diverse cartelle templates sparse per le
applicazioni del tuo progetto Django, ecco che TEMPLATE_DIRS interviene per
la risoluzione dei nomi/path.
In generale, non credo esista una vera rule-of-thumb sull'organizzazione
dei templates in un progetto Django, dipende dal caso specifico.
Quello che ti suggerirei è di pensare a due cose
a) Quanto l'app Django sia realmente "pluggable" in altri progetti se
include al suo interno i suoi template
b) Se includere i template direttamente nella cartella della App sia
veramente necessario - in generale non lo è imho
Per quest'ultimo punto, io spesso preferisco inseirire direttamente nella
App i templates associati agli "Inclusions Tags" perché tipicamente
"style-independent" ma "application-dependent".
Spero di essere stato sufficientemente chiaro.
Ad ogni modo, se condividi altri dettagli, credo ti si potrà aiutare meglio
;)
m2c
--
Valerio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130824/9702f138/attachment.html>
Maggiori informazioni sulla lista
Python