Django प्रोजेक्ट में टेम्प्लेट डालने के लिए सबसे अच्छा स्थान क्या है?
जवाबों:
Django पुस्तक से, अध्याय 4 :
यदि आप अपने टेम्प्लेट लगाने के लिए एक स्पष्ट स्थान के बारे में नहीं सोच सकते हैं, तो हम आपके Django प्रोजेक्ट के भीतर एक टेम्प्लेट डायरेक्टरी बनाने की सलाह देते हैं (जैसे, आप अध्याय 2 में आपके द्वारा बनाए गए mysite डायरेक्टरी के भीतर, यदि आप हमारे उदाहरणों के साथ अनुसरण कर रहे हैं)।
यह वही है जो मैं करता हूं, और मेरे लिए बहुत अच्छा काम किया है।
मेरी निर्देशिका संरचना कुछ इस तरह दिखती है:
/mediaमुख्य परियोजना कोड (यानी पायथन कोड) के
/templatesलिए मेरे टेम्पलेट के
/projectnameलिए मेरे सभी सीएसएस / जेएस / चित्र आदि के लिए।
<PROJECT>/<APP>/templates/<APP>/template.htmlएप्लिकेशन को विशिष्ट एप्लिकेशन के लिए कहीं और पुन: प्रयोज्य बनाने में मदद करने के लिए रखा गया।
सामान्य "वैश्विक" टेम्प्लेट के लिए मैंने उन्हें अंदर रखा <PROJECT>/templates/template.html
<APP>एस के लिए आश्चर्य है <PROJECT>/<APP>/templates/<APP>/template.html?
TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRSअब पदावनत कर रहा है - आप के बजाय जोड़ने चाहिए DIRS=[os.path.join(BASE_DIR, "templates")]करने के लिए TEMPLATES- देखने stackoverflow.com/questions/29725132/...
डोमिनिक और dlrust से ऊपर,
हम अपने django प्रोजेक्ट और एप्लिकेशन को हमारे अलग-अलग वातावरणों में तैनात करने के लिए एक सेटपूल स्रोत स्रोत वितरण (sdist) का उपयोग करते हैं।
हमने पाया है कि टेम्पलेट्स और स्टैटिक फाइल्स को django एप्लिकेशन डायरेक्टरी के तहत होना चाहिए ताकि उन्हें सेटपूल द्वारा पैक किया जा सके।
उदाहरण के लिए, हमारा टेम्प्लेट और स्थिर पथ इस प्रकार हैं:
PROJECT/APP/templates/APP/template.html
PROJECT/APP/static/APP/my.js
इस काम के लिए, MANIFEST.in को संशोधित किया जाना चाहिए (देखें http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template )
MANIFEST.in का एक उदाहरण:
include setup.py
recursive-include PROJECT *.txt *.html *.js
recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg
इसके अलावा, आपको अपने django सेटिंग फ़ाइल में यह पुष्टि करने की आवश्यकता है कि app_directories लोडर आपके TEMPLATE_LOADERS में है। मुझे लगता है कि यह django 1.4 में डिफ़ॉल्ट रूप से है।
Django सेटिंग टेम्प्लेट लोडरों का एक उदाहरण:
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
बस अगर आप सोच रहे हैं कि हम rdync फ़ाइलों को कॉपी करने के बजाय sdists का उपयोग क्यों करते हैं; यह हमारे कॉन्फ़िगरेशन प्रबंधन वर्कफ़्लो का हिस्सा है, जहाँ हमारे पास एक एकल बिल्ड टारबॉल है जिसे PIP के साथ परीक्षण, स्वीकृति और उत्पादन वातावरण में अपरिवर्तित किया गया है।
/static/टेम्प्लेट और मॉड्यूलर ऐप के बारे में सोचते समय अपने लेआउट प्लान में शामिल करने के लिए स्मार्ट 1 । आप एक और सबसे अच्छे अभ्यास का उल्लेख करना चाह सकते हैं, इसी तरह cssएक फ़ोल्डर में फाइलें डालते हैं और शायद या बस । static/app/cssjsjpg/static/app/images
DJANGO 1.11
टेम्प्लेट फ़ोल्डर जोड़ें जहां मैनेजमेन्ट मौजूद है, जो आपकी आधार निर्देशिका है। अपनी सेटिंग्स में निम्नलिखित के रूप में टैंपल के लिए डीआईआरएस बदलें
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
अब कोड का उपयोग करके टेम्पलेट का उपयोग करने के लिए,
def home(request):
return render(request,"index.html",{})
विचारों में। यह django 1.11 के लिए पूरी तरह से ठीक काम करता है
मुझे समझ में TEMPLATE_DIRSएक पूर्ण मार्ग की आवश्यकता है। और मुझे अपने कोड में पूर्ण पथ पसंद नहीं है। तो यह मेरे लिए अच्छा काम कर रहा है settings.py:
import os
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(os.path.realpath(__file__)),
"../APPNAME/templates")
)
BASE_DIR। इसलिए, आप इसे सरल बना सकते हैं:os.path.join(BASE_DIR, '../APPNAME/templates')
Django 1.10
TEMPLATE_DIRS पदावनत किया गया है।
अब हम उपयोग करने की आवश्यकता है TEMPLATE, Django 1.8 में शुरू इस तरह:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# ... some options here ...
},
},
]
जब आप TEMPLATES परिभाषित कर लेते हैं, तो आप ALLOWED_INCLUDE_ROOTS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG, TEMPLATE_DIRS, TEMPLATE_LOADERS और TEMPLATE_STRING_IF_INVALID निकाल सकते हैं।
सबसे अच्छे स्थान के बारे में, Django इस तरह के टेम्पलेट की तलाश में है:
अधिक जानकारी: https://docs.djangoproject.com/en/1.10/topics/templates/#configuration
पिछला समाधान मेरे मामले में काम नहीं आया। मैंनें इस्तेमाल किया:
TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]
TEMPLATE_DIRSअब पदावनत कर दिया गया है।
BASE_DIR। इसलिए, आप इसे सरल बना सकते हैं:os.path.join(BASE_DIR, '../myapp/templates')
आप django-dbtemplates का उपयोग करके डेटाबेस में अपने टेम्प्लेट होने पर भी विचार कर सकते हैं । यह कैशिंग के लिए भी सेटअप है, और django-reversion अनुप्रयोग जो आपको अपने टेम्प्लेट के पुराने संस्करणों को रखने में मदद करता है।
यह काफी अच्छी तरह से काम करता है, लेकिन मैं फाइलसिस्टम की तरफ से आयात / सिंक / पर थोड़ा अधिक लचीलापन पसंद करूंगा।
[संपादित करें: २० अगस्त २०१ 201 - यह रिपॉजिटरी उपलब्ध नहीं है, एक ही नाम के साथ https://github.com/jazzband/django-dbtemplates पर उपलब्ध है और इसे ago महीने पहले अपडेट किया गया था। मैं अब किसी भी सार्थक तरीके से Django का उपयोग नहीं करता, इसलिए इसके लिए प्रतिज्ञा नहीं कर सकता।]