Django

2011-08-25 11 views
34

में एकाधिक ऐप्स के लिए स्थैतिक फ़ाइलों का प्रबंधन करना मैं कई अनुप्रयोगों द्वारा रचित एक Django (1.3) प्रोजेक्ट विकसित कर रहा हूं। प्रत्येक एप्लिकेशन की अपनी स्थिर फाइलें static निर्देशिका के अंतर्गत होती हैं। इसके अलावा, मैंने project_static नामक एक निर्देशिका जोड़ा है जिसमें स्थिर फाइलें होनी चाहिए जो विभिन्न अनुप्रयोगों जैसे कि jQuery के समान हैं।Django

समस्या जो मैं तुरंत चलाता हूं वह टक्कर नामकरण का है। डिफ़ॉल्ट रूप से, collectstatic एप्लिकेशन द्वारा वर्गीकृत किए बिना, सब कुछ वैश्विक static निर्देशिका के अंतर्गत बस रखेगा। यह मेरे लिए काम नहीं करता है, क्योंकि प्रत्येक एप्लिकेशन में - उदाहरण के लिए - css/screen.css नामक एक फ़ाइल है।

तरह से मैं यह STATICFILES_FINDERS से django.contrib.staticfiles.finders.AppDirectoriesFinder को दूर करने और namespaced static files dirs का उपयोग करना है हल है, तो अपनी सेटिंग्स अब की तरह

STATICFILES_DIRS = (
    os.path.join(PROJECT_PATH, 'project_static'), 
    ('my_app', os.path.join(PROJECT_PATH, 'my_app', 'static')), 
    ('another_app', os.path.join(PROJECT_PATH, 'another_app', 'static')), 
    ... 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
) 

समस्या यह है कि इस तरह से मैं स्टैटिक फ़ाइलें अन्य सभी अनुप्रयोगों के लिए, के लिए खो देते हैं देखो उदाहरण django.contrib.admin। बेशक मैं मैन्युअल रूप से व्यवस्थापक जोड़ सकता हूं, लेकिन मुझे यकीन नहीं है कि व्यवस्थापक को तोड़ने के बिना ऐसा कैसे करें, जिसमें एक अलग निर्देशिका संरचना है।

क्या एक से अधिक एप्लिकेशन के साथ स्थिर फ़ाइलों का प्रबंधन करने का कोई बेहतर तरीका है?

उत्तर

39

यह वही समस्या है जो ऐप-विशिष्ट templates निर्देशिकाओं का उपयोग करने के साथ होती है। यदि आप ऐप में सीधे templates के तहत फ़ाइलों को सीधे फेंक देते हैं, तो यदि आप दो ऐप्स या यहां तक ​​कि प्रोजेक्ट-स्तरीय templates निर्देशिका उसी नाम के टेम्पलेट का उपयोग करते हैं तो आप नाम टकराव के साथ समाप्त हो जाएंगे। उस के लिए ठीक वास्तव में templates निर्देशिका के अंदर ऐप्लिकेशन के नाम की एक निर्देशिका में टेम्पलेट्स डाल करने के लिए की तरह है:

- some_app 
    - templates 
     - some_app 
      - index.html 

तो, मैं स्थिर करने के लिए एक ही विचार लागू होते हैं:

- some_app 
    - static 
     - some_app 
      - css 
      - img 
      - js 

इस तरह , जब आप संग्रहित चलाते हैं, तो प्रत्येक व्यक्तिगत ऐप की स्थैतिक फाइलें नाम-आधारित निर्देशिका के अंदर रखी जाती हैं। आपके द्वारा किए जाने वाले एकमात्र परिवर्तन को आपके टेम्पलेट्स में ऐप-नाम निर्देशिका वाले प्रत्येक फाइल को उपसर्ग करना है। तो {{ STATIC_URL }}css/style.css के बजाय आपके पास {{ STATIC_URL }}my_app/css/style.css है।

+0

अगर हम nginx का उपयोग कर स्थिर फाइलों की सेवा करते हैं तो यह अभी भी पसंदीदा तरीका है? (स्थैतिक फाइलों को रखने, ऐप में खुद टेम्पलेट्स) – Dineshkumar

+0

हाँ। आप अपनी सभी संपत्तियों को अपनी परियोजना के साथ प्रबंधित करना चाहते हैं। –