django

2012-03-06 4 views
19

के साथ जावास्क्रिप्ट फ़ाइल करने के लिए STATIC_URL पास करना जावास्क्रिप्ट फ़ाइलों में {{STATIC_URL}} को पारित करने का सबसे अच्छा समाधान कौन सा है?django

मैं django और पायथन के साथ काम कर रहा हूं।

अग्रिम धन्यवाद। सम्मान।

+0

आप किसी टेम्पलेट के लिए जावास्क्रिप्ट फ़ाइलें लोड मतलब हैं? या आप जावास्क्रिप्ट फ़ाइल में {{STATIC_URL}} के मान का उपयोग करते हैं? – arnkore

उत्तर

19

django-compressor आपको यह सुनिश्चित करने देता है कि आप अपनी सभी आवश्यक जेएस या सीएसएस को एक फ़ाइल में और फ़ाइल आकार को अनुकूलित करने के द्वारा अपनी साइट को अनुकूलित कर सकें।

अद्यतन: डिफ़ॉल्ट रूप से, कंप्रेसर STATIC_URL का उपयोग कर रिश्तेदार यूआरएल को पूर्ण यूआरएल में परिवर्तित करेगा। यदि आप विकास संस्करण डाउनलोड करते हैं, तो यह एक django टेम्पलेट इंजन पार्सर के साथ आता है जो आपको {% static %} टैग जैसे सीधे अपने सीएसएस फ़ाइलों में सभी django टेम्पलेट कोड का उपयोग करने देता है।

https://github.com/jezdez/django_compressor

टेम्पलेट इंजन के माध्यम से अपने js या सीएसएस फ़ाइलें पार्स करने के लिए स्थापित करने के बाद settings.py में TemplateFilter सक्षम करें।

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

अब {% compress js %} ब्लॉक के भीतर किसी भी जे एस Django टेम्पलेट भाषा से पार्स किया जाएगा ...

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

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

आप सबसे अच्छा तरीका है के लिए कहा - मुझे लगता है कि यह सबसे अच्छा है। गतिशील फ़ाइलों की सेवा करने से निश्चित रूप से बेहतर है। , तब

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

आप बस myfile.js में STATIC_URL फोन करके स्थिर यूआरएल का उपयोग कर सकते हैं::

+2

यह एक भयानक सुझाव है! django-compressor एक अच्छी परियोजना है। – slypete

+0

@ स्लीपेटे, हाँ यह आश्चर्यजनक है! फ़ाइल गिनती, फ़ाइल आकार अनुकूलित करें, और यहां तक ​​कि टेम्पलेट चर जोड़ें। प्रतिभाशाली। यह मेरा नवीनतम विशाल django गेम परिवर्तक है .. अगला क्या है ?? –

+0

मैं वास्तव में इस उपकरण को पसंद करने कर रहा हूँ - एक नोट GitHub से यह क्लोनिंग से इस्तेमाल करके उनकी 'पिप django_compressor स्थापित' यह स्थापित करने के लिए है - कम है कि 10 मिनट की स्थापना के लिए ले लिया। केवल मेरी समस्या थी कि मैं अपने settings.py में 'COMPRESS_ENABLED = True' को स्पष्ट रूप से सेट करना था ... जैसे कि आपके पास पहले से ही DEBUG = कुछ अन्य एप्लिकेशन से सही है, तो वह इसे पढ़ेगा और वास्तव में संपीड़ित नहीं होगा। – JayCrossler

36

स्थिर url मान के साथ एक वैश्विक जावास्क्रिप्ट चर का उपयोग करना अधिक आसान है

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

यह बहुत अच्छा है! –

+0

मुझे यह समाधान पसंद है! – andi

5

मुझे लगता है कि यह पूर्ण सेटअप के रूप में @ युजी 'टोमिता' टोमिता की टिप्पणी को पूरा करता है।

यह मेरे लिए काम किया।

इस प्रकार मैंने django जेएस फ़ाइल में STATIC_URL का उपयोग करने के लिए django कंप्रेसर का पूरा सेटअप किया है।

https://github.com/jezdez/django_compressor

pip install django_compressor 

जोड़ें अपने INSTALLED_APPS सेटिंग को 'कंप्रेसर':

INSTALLED_APPS = (
    # other apps 
    "compressor", 
) 

डीबग मोड में संपीड़न परीक्षण करने के लिए, settings.py में:

COMPRESS_ENABLED = True 

मामले में आप Django के staticfiles contrib ऐप (या इसके स्टैंडअलोन समकक्ष django-staticfiles) का उपयोग करें STATICFILES_FINDERS django.contrib.staticfiles साथ सेटिंग, उदाहरण के लिए करने के लिए घ Django कंप्रेसर की फाइल खोजक:

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

सेटिंग्स में TemplateFilter सक्षम करें।टेम्पलेट इंजन के माध्यम से अपने जेएस या सीएसएस फ़ाइलों को पार्स करने के लिए स्थापित करने के बाद py।

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

अब {% संपीड़ित js%} ब्लॉक के भीतर किसी भी जे एस Django टेम्पलेट भाषा से पार्स किया जाएगा ...

{% load compress %} 

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

// my_script.js 

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

मैं दस्तावेज़ पढ़ रहा था और मुझे वहां "STATICFILES_FINDERS" सेटिंग नहीं मिली। अपनी टिप्पणी पढ़ने के बाद और इसे जोड़ा, मेरे ऐप ने काम करना शुरू कर दिया। धन्यवाद! – mk2