2014-06-16 5 views
50

के बीच क्या अंतर है इस विषय का सबसे महत्वपूर्ण हिस्सा विषय में है।{% लोड staticfiles%} और {% लोड स्थिर%}

मुझे आश्चर्य है कि किस मामले के लिए टैग सबसे अच्छा है। इसके अलावा ... मुझे कोड मिला, जो settings.STATIC_URL का उपयोग टेम्पलेट्स में {{STATIC_URL}} द्वारा भी किया गया था।

मैं थोड़ा उलझन में हूं।

+0

मैं बस, सब कुछ के लिए STATIC_URL का उपयोग करें और इसके लिए मुझे – Maximas

+1

@Maximas यह काम करता है ठीक से काम करने लगता है, लेकिन मुझे लगता है कि यह सर्वोत्तम अभ्यास नहीं है – Rexford

+0

इनमें से कोई भी जवाब अच्छा नहीं है। यह एक [अधिक हालिया और पूर्ण उत्तर] है (https://stackoverflow.com/a/34424007/1577947)। – Jarad

उत्तर

1

docs का संदर्भ लें, जहां इसकी एक अच्छी व्याख्या है। असल {% static %} टेम्पलेट टैग STATICFILE_STORAGE

डॉक्स के रूप में के स्थान पता कहते हैं:

{% load static from staticfiles %} <img src="{% static "images/hi.jpg" 
%}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg". 

यह विशेष रूप से उपयोगी है जब का उपयोग कर के रूप में स्थिर फ़ाइलों की सेवा में प्रलेखित लिए एक गैर-स्थानीय भंडारण बैकएंड फ़ाइलों को तैनात क्लाउड सेवा या सीडीएन से।

आप इसे प्रदर्शित किए बिना एक स्थिर यूआरएल पुनः प्राप्त करना चाहते हैं तो आपके पास एक अलग कॉल का उपयोग कर सकते हैं:

{% load static from staticfiles %} 
{% static "images/hi.jpg" as myphoto %} 
<img src="{{ myphoto }}" alt="Hi!" /> 

आशा है कि मदद करता है !!

+13

मुझे अभी भी पता नहीं है कि मुझे '{% load static%} ',' {% load staticfiles%} ',' {{STATIC_URL}} ',' {{STATIC_URL}} 'का उपयोग कब करना चाहिए ... और मुझे पता है कि मुझे नहीं पता कि अंतर क्या है '{% लोड स्थिर%}' और '{%% staticfiles%} से '0% लोड स्थिर'' –

+0

बस दस्तावेज़ से लाइनों का एक समूह कॉपी करने में वास्तव में –

41

The built-in static template tag "लिंक [एस] स्थिर फ़ाइलों को STATIC_ROOT में सहेजे जाते हैं करने के लिए"।

The staticfiles contrib app's static template tag "दिए गए सापेक्ष पथ के लिए पूर्ण यूआरएल बनाने के लिए कॉन्फ़िगर किए गए STATICFILES_STORAGE स्टोरेज का उपयोग करता है", जो "फ़ाइलों को तैनात करने के लिए गैर-स्थानीय स्टोरेज बैकएंड का उपयोग करते समय विशेष रूप से उपयोगी" होता है।

निर्मित static टेम्पलेट टैग के दस्तावेज़ (ऊपर से जुड़ा हुआ) एक टिप्पणी है कि "इस तरह के एक बादल सेवा का उपयोग कर स्थिर फ़ाइलों की सेवा के लिए के रूप में यदि आप एक उन्नत उपयोग मामला है" staticfiles योगदान एप्लिकेशन की static टेम्पलेट टैग का उपयोग करने का कहना है , और यह ऐसा करने का यह उदाहरण देता है:

{% load static from staticfiles %} 
<img src="{% static "images/hi.jpg" %}" alt="Hi!" /> 

आप {% load staticfiles %} बजाय {% load static from staticfiles %} इस्तेमाल कर सकते हैं अगर आप चाहते हैं, लेकिन बाद अधिक स्पष्ट है।

+14

[Django V1.10] (https: //docs.djangoproject .com/en/1.10/ref/templates/buildins/# static) अब केवल '{% लोड स्थिर%}' की अनुशंसा करता है। "पुराने संस्करणों में, आपको STATICFILES_STORAGE में परिभाषित स्टोरेज से फ़ाइलों को सेवा देने के लिए अपने टेम्पलेट में 'staticfiles%} से' {% लोड स्थैतिक' का उपयोग करना था। अब इसकी आवश्यकता नहीं है। " –

3

मुझे नहीं पता कि अंतर क्या होना चाहिए, लेकिन मुझे उपयोग केस अंतर मिला (डीजेंगो 1.9.1 का उपयोग अपाचे के माध्यम से चल रहा है, पायथन 3.4 पर wsgi)। मेरे ऐप में, मेरे पास डेटाबेस में ImageFields में कुछ छवियां हैं। अगर मैं अपने टेम्पलेट में इस तरह कोड का उपयोग करें:

<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a> 

तो, अगर मैं {% load static %} उपयोग करते हैं, Django thorws एक TypeError (Cannot mix str and non-str arguments)। यह संभवतः है क्योंकि object.image एक स्ट्रिंग नहीं है, यह ImageField है, जो बाद के चरण में एक स्ट्रिंग में परिवर्तित हो जाता है। हालांकि, अगर कोई {% load staticfiles %} का उपयोग करता है तो ऐसी कोई त्रुटि नहीं होती है।

दुर्भाग्य से, समस्या को डीबग करने का प्रयास करने के घंटों खर्च करने के बाद मुझे यह अंतर पता चला।

#image string 
def image_str(self): 
    return str(self.image) 

आशा इस ज्ञान किसी को फायदा नहीं होगा: मैं जब इस तरह वस्तु के लिए एक स्ट्रिंग कनवर्टर विधि जोड़ने के लिए पहला विकल्प का उपयोग कर, अर्थात् के लिए एक समाधान खोजने के लिए कामयाब रहे।

1

{% load staticfiles %} बहुत उपयोगी है जब आप S3 की तरह अलग अलग भंडार का उपयोग कर रहे है, तो यह S3 URL में परिवर्तित कर देंगे

संबंधित मुद्दे