2012-03-06 12 views

risposta

19

django-compressor consente di eseguire questo e ottimizzare il sito condensando tutti i file JS o CSS necessari in un unico file e ottimizzando le dimensioni del file.

AGGIORNAMENTO: Per impostazione predefinita, il compressore convertirà gli url relativi in ​​url assoluti utilizzando STATIC_URL. Se scarichi la versione di sviluppo, viene fornito con un parser del motore di template django che ti consente di utilizzare tutto il codice del template django direttamente nei tuoi file CSS, come il tag {% static %}.

https://github.com/jezdez/django_compressor

Attivare l'TemplateFilter in settings.py dopo l'installazione di analizzare i tuoi js o file CSS tramite il motore di template.

COMPRESS_JS_FILTERS = [ 
    'compressor.filters.template.TemplateFilter', 
] 

Ora eventuali JS all'interno {% compress js %} blocchi saranno analizzati dal linguaggio dei template Django ...

{% compress js %} 
    <script src="/my_script.js" type="text/javascript"></script> 
{% endcompress %} 

// my_script.js 
alert('{{ STATIC_URL|escapejs }}'); 

Avete chiesto il modo migliore - credo che questo è il migliore. Sicuramente meglio che servire file dinamici.

+2

Questo è un suggerimento fantastico! django-compressor è un bel progetto. – slypete

+0

@slypete, sì è incredibile! Ottimizza il conteggio dei file, la dimensione del file e persino aggiungi le variabili del modello. Brillante. Questo è il mio ultimo enorme django game changer ... cosa c'è dopo !? –

+0

Mi piace davvero questo strumento - una nota è installarlo usando 'pip install django_compressor' piuttosto che clonarlo da github - ci sono voluti meno di 10 minuti per la configurazione. L'unico problema che ho avuto è stato quello di impostare in modo esplicito "COMPRESS_ENABLED = True" nel mio settings.py ... come se tu avessi già DEBUG = True da qualche altra applicazione, leggerà e non comprimerà. – JayCrossler

36

Utilizzando una variabile JavaScript globale con il valore URL statico è più semplice:

<script language="javascript">var STATIC_URL = "{{ STATIC_URL|escapejs }}";</script> 
<script src="{{ STATIC_URL }}js/myfile.js"></script> 

Poi, si può semplicemente utilizzare l'url statica chiamando STATIC_URL in myfile.js:

html = '<img src="'+STATIC_URL+'/icons/flags/tn.gif">'; 
+0

è davvero fantastico! –

+0

Mi piace questa soluzione! – andi

5

Penso che questo integri il commento di @Yuji 'Tomita' Tomita, come una configurazione completa.

questo ha funzionato per me.

Ecco come ho eseguito la configurazione completa del compressore django per l'utilizzo di STATIC_URL nel file django js.

https://github.com/jezdez/django_compressor

pip install django_compressor 

Add 'Compressore' per l'impostazione INSTALLED_APPS:

INSTALLED_APPS = (
    # other apps 
    "compressor", 
) 

Per provare la compressione in modalità debug, in settings.py:

COMPRESS_ENABLED = True 

Nel caso in cui usa l'app contributor staticfiles di Django (o la sua controparte indipendente django-staticfiles) che devi pubblicare File Finder di d Django Compressor per l'impostazione STATICFILES_FINDERS, ad esempio con django.contrib.staticfiles:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    # other finders.. 
    'compressor.finders.CompressorFinder', 
) 

Attivare il TemplateFilter nelle impostazioni.py dopo l'installazione per analizzare i file js o css tramite il motore di template.

COMPRESS_JS_FILTERS = [ 
    'compressor.filters.template.TemplateFilter', 
] 

Ora eventuali JS all'interno {% comprimere js%} blocchi saranno analizzati dal linguaggio dei template Django ...

{% load compress %} 

{% compress js %} 
    <script src="/my_script.js" type="text/javascript"></script> 
{% endcompress %} 

// my_script.js 

alert('{{ STATIC_URL|escapejs }}'); 
+0

Stavo leggendo i documenti e non ho trovato questa impostazione "STATICFILES_FINDERS" lì. Dopo aver letto il tuo commento e aggiunto, la mia app ha iniziato a funzionare. Grazie! – mk2

Problemi correlati