Django 2.1 - Managing static files (e.g. images, JavaScript, CSS)

स्थिर फ़ाइलों का प्रबंधन (उदाहरण के लिए चित्र, जावास्क्रिप्ट, सीएसएस)




django

स्थिर फ़ाइलों का प्रबंधन (उदाहरण के लिए चित्र, जावास्क्रिप्ट, सीएसएस)

आमतौर पर वेबसाइटों को छवियों, जावास्क्रिप्ट, या सीएसएस जैसी अतिरिक्त फ़ाइलों की सेवा करने की आवश्यकता होती है। Django में, हम इन फ़ाइलों को "स्थिर फ़ाइलों" के रूप में संदर्भित करते हैं। Django आपको प्रबंधन करने में मदद करने के लिए django.contrib.staticfiles प्रदान करता है।

यह पृष्ठ बताता है कि आप इन स्थिर फ़ाइलों की सेवा कैसे कर सकते हैं।

स्थिर फ़ाइलों को कॉन्फ़िगर करना

  1. सुनिश्चित करें कि django.contrib.staticfiles को आपके INSTALLED_APPS में शामिल INSTALLED_APPS
  2. अपनी सेटिंग फ़ाइल में, उदाहरण के लिए, STATIC_URL को परिभाषित करें:

    STATIC_URL = '/static/'
    
  3. अपने टेम्पलेट में, कॉन्फ़िगर किए गए STATICFILES_STORAGE का उपयोग करके दिए गए सापेक्ष पथ के लिए URL बनाने के लिए static टेम्पलेट टैग का उपयोग करें।

    {% load static %}
    <img src="{% static "my_app/example.jpg" %}" alt="My image">
    
  4. अपने स्थिर फ़ाइलों को अपने ऐप में static नामक फ़ोल्डर में संग्रहीत करें। उदाहरण के लिए my_app/static/my_app/example.jpg

फाइलों को सेवित करना

इन कॉन्फ़िगरेशन चरणों के अतिरिक्त, आपको वास्तव में स्थिर फ़ाइलों की सेवा करने की भी आवश्यकता होगी।

विकास के दौरान, यदि आप django.contrib.staticfiles उपयोग django.contrib.staticfiles , तो DEBUG True सेट होने पर django.contrib.staticfiles.views.serve() स्वचालित रूप से django.contrib.staticfiles.views.serve() देखें django.contrib.staticfiles.views.serve() द्वारा यह स्वचालित रूप से किया जाएगा।

यह विधि घोर अकुशल है और शायद असुरक्षित है , इसलिए यह उत्पादन के लिए अनुपयुक्त है

उत्पादन वातावरण में स्थिर फ़ाइलों की सेवा करने के लिए उचित रणनीतियों के लिए स्थैतिक फ़ाइलों को तैनात करना देखें।

आपकी परियोजना में शायद स्थिर संपत्ति होगी जो किसी विशेष ऐप से बंधे नहीं हैं। अपने एप्लिकेशन के अंदर एक static/ निर्देशिका का उपयोग करने के अलावा, आप अपनी सेटिंग्स फ़ाइल में निर्देशिका ( STATICFILES_DIRS ) की एक सूची को परिभाषित कर सकते हैं जहां Django भी स्थिर फ़ाइलों की तलाश करेगा। उदाहरण के लिए:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

STATICFILES_FINDERS लिए दस्तावेज़ीकरण देखें कि कैसे staticfiles आपकी फ़ाइलों को ढूँढता है।

स्टेटिक फ़ाइल नामस्थान

अब हम अपनी स्थिर फाइलों को सीधे my_app/static/ (बजाय एक अन्य my_app उपनिर्देशिका बनाने के) में डालने में सक्षम हो सकते हैं, लेकिन यह वास्तव में एक बुरा विचार होगा। Django पहली स्थैतिक फ़ाइल का उपयोग करेगा, जिसका नाम उसके मैच से मिलता है, और यदि आपके पास किसी भिन्न एप्लिकेशन में एक ही नाम के साथ एक स्थिर फ़ाइल है, तो Django उनके बीच अंतर करने में असमर्थ होगा। हमें सही तरीके से Django को इंगित करने में सक्षम होने की आवश्यकता है, और यह सुनिश्चित करने का सबसे आसान तरीका उन्हें नाम स्थान देना है। यही है, उन स्थिर फाइलों को आवेदन के लिए नामित एक और निर्देशिका के अंदर डालकर।

विकास के दौरान स्थिर फ़ाइलों की सेवा करना

यदि आप ऊपर बताए अनुसार django.contrib.staticfiles उपयोग करते हैं, तो DEBUG True सेट होने पर runserver स्वचालित रूप से ऐसा करेगा। यदि आपके पास INSTALLED_APPS में django.contrib.staticfiles नहीं हैं, तो आप अभी भी django.views.static.serve() दृश्य का उपयोग करके मैन्युअल रूप से स्थिर फ़ाइलों की सेवा कर सकते हैं।

यह उत्पादन उपयोग के लिए उपयुक्त नहीं है! कुछ सामान्य परिनियोजन रणनीतियों के लिए, स्थिर फ़ाइलों को नियोजित करना देखें।

उदाहरण के लिए, यदि आपके STATIC_URL को /static/ रूप में परिभाषित किया गया है, तो आप इसे निम्नलिखित स्निपेट को अपनी urls.py में जोड़कर कर सकते हैं:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

ध्यान दें

यह सहायक फ़ंक्शन केवल डिबग मोड में काम करता है और केवल तभी दिया जाता है जब दिया गया उपसर्ग स्थानीय हो (जैसे /static/ ) और URL नहीं (जैसे http://static.example.com/ )।

इसके अलावा यह सहायक कार्य केवल वास्तविक STATIC_ROOT फ़ोल्डर का कार्य करता है; यह django.contrib.staticfiles जैसी स्थिर फ़ाइलों की खोज नहीं करता है।

विकास के दौरान एक उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों की सेवा

विकास के दौरान, आप django.views.static.serve() दृश्य का उपयोग करके उपयोगकर्ता-अपलोड की गई मीडिया फ़ाइलों को MEDIA_ROOT से देख सकते हैं।

यह उत्पादन उपयोग के लिए उपयुक्त नहीं है! कुछ सामान्य परिनियोजन रणनीतियों के लिए, स्थिर फ़ाइलों को नियोजित करना देखें।

उदाहरण के लिए, यदि आपका MEDIA_URL /media/ रूप में परिभाषित किया गया है, तो आप इसे निम्न स्निपेट को अपनी urls.py में जोड़कर कर सकते हैं:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ध्यान दें

यह सहायक फ़ंक्शन केवल डिबग मोड में काम करता है और केवल तभी दिया जाता है जब दिया गया उपसर्ग स्थानीय हो (जैसे /media/ ) और URL नहीं (जैसे http://media.example.com/ )।

परिक्षण

जब अंतर्निहित टेस्टिंग क्लाइंट के बजाय वास्तविक HTTP अनुरोधों का उपयोग करने वाले परीक्षण चल रहे हों (यानी अंतर्निहित LiveServerTestCase का उपयोग करते समय) स्थिर संपत्ति को बाकी सामग्री के साथ सेवा करने की आवश्यकता होती है, इसलिए परीक्षण वातावरण वास्तविक रूप से उसी के रूप में पुन: पेश करता है संभव है, लेकिन LiveServerTestCase में केवल बहुत ही बेसिक स्टैटिक फाइल-सर्विंग फंक्शनलिटी है: यह STATIC_ROOT के STATIC_ROOT फीचर के बारे में नहीं जानता है और यह मानता है कि स्टेटिक कंटेंट पहले ही STATIC_ROOT तहत एकत्र हो STATIC_ROOT

इसके कारण, staticfiles अपने स्वयं के django.contrib.staticfiles.testing.StaticLiveServerTestCase का निर्माण करते हैं, जो कि इन परीक्षणों के निष्पादन से सभी परिसंपत्तियों को पारदर्शी तरीके से सेवा करने की क्षमता रखता है जो हमें मिलता है। DEBUG = True साथ विकास के समय पर, यानी पहले उन्हें collectstatic का उपयोग किए बिना इकट्ठा करने के लिए।

तैनाती

django.contrib.staticfiles एक ही निर्देशिका में स्थिर फ़ाइलों को इकट्ठा करने के लिए एक सुविधा प्रबंधन आदेश प्रदान करता है ताकि आप उन्हें आसानी से सेवा कर सकें।

  1. STATIC_ROOT सेटिंग को उस निर्देशिका पर सेट करें, जहाँ से आप इन फ़ाइलों की सेवा करना चाहते हैं, उदाहरण के लिए:

    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. collectstatic प्रबंधन आदेश चलाएँ:

    $ python manage.py collectstatic
    

    यह आपके स्टैटिक फोल्डर की सभी फाइलों को STATIC_ROOT डायरेक्टरी में STATIC_ROOT कर STATIC_ROOT

  3. फ़ाइलों की सेवा के लिए अपनी पसंद के वेब सर्वर का उपयोग करें। स्थैतिक फ़ाइलों को तैनात करना स्थैतिक फ़ाइलों के लिए कुछ सामान्य परिनियोजन रणनीतियों को शामिल करता है।

और अधिक जानें

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