[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