[Python] Django file "statici"
Alessandro Dentella
sandro a e-den.it
Mar 17 Feb 2015 09:30:21 CET
Ciao Ivan,
On Mon, Feb 16, 2015 at 08:11:22PM +0100, Ivan B. wrote:
>
> Il 16/02/2015 19:41, Alessandro Dentella ha scritto:
> >Che ne dici se ci dividiamo il lavoro? Tu comincia a dirci cosa
> >non hai capito, cosa hai fatto e come hai dedotto che non
> >funziona... e postaci anche la configurazione... Hai pb col
> >runserver o sotto nginx? sandro *:-)
>
> Effettivamente sono stato un po' poco chiaro ^^
> I problemi, per il momento, sono sotto runserver.
Ok, leggi allora proprio fino in fondo...
> Quello che non capisco è come configurare la directory per gli
> static file e come richiamarla nei template.
>
> Ok, ecco cosa ho combinato.
>
> In settings.py ho inserito:
> STATIC_URL = '/static/'
ok, questo cambia come chiamerai i file, non quali e dove sono/li metti
> e controllato che ci fosse 'django.contrib.staticfiles' in installed_apps
Questo garantisce che esista il comando staticfiles
> Nel template ho inserito:
> {% load staticfiles %}
> <img src="{% static "img/prova.png" %}" alt="Prova" />
Secondo me sei già troppo avanti nel debug, fai un pezzo alla
volta. Cerca prima di capire se i file finiscono nel posto giusto
Quello che non vedo nella tua conf è la configurazione del meccanismo
degli staticfiles:
STATICFILES_DIRS
STATICFILES_FINDERS
STATIC_ROOT
che puoi leggere rapidamente con "manage.py diffsettings | grep
STATIC" sotto linux e mac.
Il meccanismo degli static file sostanzialmete prevede
* una configurazione per definire i raccoglitori (FINDERS)
* una configuraione per definire la cartella di destinazione
(STATIC_ROOT)
I finders di default raccolgono da
* applicazioni:
django.contrib.staticfiles.finders.AppDirectoriesFinder
* filesystem: django.contrib.staticfiles.finders.FileSystemFinder
Questo a sua volta necessita di STATICFILES_DIRS (una tupla) per
capire da dove raccogliere
La mia configurazione è così:
STATICFILES_DIRS = ('{PRJ}/web/static_manual',)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATIC_ROOT = '{PRJ}/web/static_auto'
STATIC_URL = '/static/'
dove {PRJ} lo sostituisci con la root del tuo progetto.
Il nome *static_manual* suggerisce che è una cartella dove metto a mano
gli statici del progetto, *static_auto* è quella dove il comando
collectstatic copia i file prelevandoli da dove è istruito (apps e
fylesystem).
> Il mio progettino di test si chiama (che fantasia) progetto. La
> directory static che contiene a sua volta "/img/prova.png" ho
> provato a posizionarla nella root di progetto (dove c'è manage.py),
> all'interno di "progetto/progetto/" e all'interno di
> "progetto/progetto/templates". In nessuna delle tre prove sono
non la metterei nei templates, il resto va bene, pur di dichiararla
nella STATIC_ROOT.
Ma non mi pare che tu abbia chiaro il ruolo di STATICFILES_DIRS.
Io non metto mai nulla in static_auto (La mia STATIC_ROOT) che lascio
riempire a mano. Il motivo è banale: quella contiene file che non
vogli tracciare con mercurial, mentre la static_maual (dichiarata in
STATICFILES_DIRS è composta di file che tengo sotto controllo di
versione.
DEBUG
=====
A questo punto ti suggerisco di lanciare manage.py collectstatic e
verificare se i file arrivano al posto giusto (nella STATIC_ROOT) e
solo dopo che te ne sei accertato arriverai al debug del template.
RUNSERVER
=========
Quando usi il runserver non ti serve neanche passare dalla cartella
STATIC_DIR se in urls.py del progetto hai qualcosa tipo:
urlpatterns += staticfiles_urlpatterns()
Risulta pratico per lo sviluppo. Ma prima di usare questo termina con
successo gli altri passaggi.
sandro
*:-)
--
Sandro Dentella *:-)
http://www.reteisi.org Soluzioni libere per le scuole
http://sqlkit.argolinux.org SQLkit home page - PyGTK/python/sqlalchemy
Maggiori informazioni sulla lista
Python