Django 2.1 - Overriding templates

ओवरराइडिंग टेम्प्लेट




django

ओवरराइडिंग टेम्प्लेट

अपने प्रोजेक्ट में, आप किसी अन्य Django एप्लिकेशन में एक टेम्प्लेट को ओवरराइड करना चाह सकते हैं, चाहे वह थर्ड-पार्टी एप्लिकेशन हो या django.contrib.admin जैसे django.contrib.admin । आप या तो अपने प्रोजेक्ट के टेम्प्लेट डायरेक्टरी में या एप्लिकेशन के टेंपलेट डायरेक्टरी में टेम्प्लेट ओवरराइड कर सकते हैं।

यदि आपके पास ऐप और प्रोजेक्ट टेम्प्लेट निर्देशिकाएं हैं जिनमें दोनों ओवरराइड होते हैं, तो डिफ़ॉल्ट Django टेम्प्लेट लोडर पहले प्रोजेक्ट-स्तर निर्देशिका से टेम्पलेट को लोड करने का प्रयास करेगा। दूसरे शब्दों में, DIRS को DIRS से पहले खोजा APP_DIRS

प्रोजेक्ट के टेम्प्लेट डायरेक्टरी से ओवरराइडिंग

सबसे पहले, हम आपके प्रोजेक्ट के टेम्प्लेट डायरेक्टरी में रिप्लेसमेंट टेम्प्लेट बनाकर ओवरराइडिंग टेम्प्लेट का पता लगाएंगे।

मान लीजिए कि आप blog नामक तृतीय-पक्ष एप्लिकेशन के लिए टेम्प्लेट को ओवरराइड करने का प्रयास कर रहे हैं, जो टेम्प्लेट blog/list.html . blog/post.html और blog/list.htmlblog/list.html प्रदान करता है। आपके प्रोजेक्ट के लिए प्रासंगिक सेटिंग इस तरह दिखाई देगी:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = [
    ...,
    'blog',
    ...,
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        ...
    },
]

यदि आपने अपना प्रोजेक्ट डिफ़ॉल्ट प्रोजेक्ट टेम्प्लेट का उपयोग करके बनाया है तो TEMPLATES सेटिंग और BASE_DIR पहले से मौजूद रहेगा। जिस सेटिंग को संशोधित करना है वह DIRS

ये सेटिंग्स मानती हैं कि आपके पास अपने प्रोजेक्ट की जड़ में एक templates डायरेक्टरी है। blog ऐप के टेम्प्लेट को ओवरराइड करने के लिए, templates डायरेक्टरी में एक फोल्डर बनाएं और टेम्प्लेट फ़ाइलों को उस फोल्डर में जोड़ें:

templates/
    blog/
        list.html
        post.html

टेम्पलेट लोडर सबसे पहले DIRS डायरेक्टरी में टेम्प्लेट की DIRS । जब blog ऐप में विचार blog/post.html और blog/list.html टेम्पलेट के लिए blog/list.html , तो लोडर आपके द्वारा बनाई गई फाइलों को वापस कर देगा।

ऐप के टेम्प्लेट डायरेक्टरी से ओवरराइड करना

चूंकि आप अपनी किसी परियोजना के ऐप्स के बाहर स्थित टेम्प्लेट को ओवरराइड कर रहे हैं, इसलिए पहली विधि का उपयोग करना और प्रोजेक्ट के टेम्प्लेट फ़ोल्डर में टेम्प्लेट ओवरराइड करना अधिक आम है। यदि आप पसंद करते हैं, हालांकि, ओवरराइड को ऐप के टेम्प्लेट डायरेक्टरी में रखना भी संभव है।

पहले, सुनिश्चित करें कि आपकी टेम्प्लेट सेटिंग ऐप निर्देशिकाओं के अंदर जाँच कर रही हैं:

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

यदि आप myapp नामक एप में टेम्प्लेट ओवरराइड करना चाहते हैं और ओवरराइड करने वाले टेम्प्लेट को blog/list.html और blog/post.html blog/list.html नाम दिया गया है, तो आपकी निर्देशिका संरचना इस तरह दिखाई देगी:

myapp/
    templates/
        blog/
            list.html
            post.html

APP_DIRS को True सेट करने के साथ, टेम्प्लेट लोडर ऐप के टेम्प्लेट डायरेक्टरी में दिखेगा और टेम्प्लेट APP_DIRS