संदर्भ प्रोसेसर अधिक गतिशील ऑब्जेक्ट डेटा को संभालने में बेहतर अनुकूल हैं - उन्हें documentation में मैपिंग के रूप में परिभाषित किया गया है और यहां कई पोस्टों में उन्हें संशोधित किया जा रहा है या विचारों के चारों ओर पारित किया गया है - यह नहीं है समझें कि एक टेम्पलेट वैश्विक जानकारी तक पहुंच खो सकता है, उदाहरण के लिए, आप दृश्य में एक विशेष संदर्भ प्रोसेसर का उपयोग करना भूल गए हैं। डेटा & परिभाषा द्वारा वैश्विक है जो टेम्पलेट को दृश्य जोड़ता है।
कस्टम टेम्पलेट टैग को परिभाषित करने का एक बेहतर तरीका है।इस तरह:
- टेम्पलेट्स विचारों पर भरोसा नहीं कर रहे हैं वैश्विक सूचना उन्हें में पारित किया है करने के लिए
- यह सूखी-एर है: वैश्विक सेटिंग्स को परिभाषित एप्लिकेशन कई परियोजनाओं को निर्यात किया जा सकता है, परियोजनाओं
भर में आम कोड को नष्ट
- टेम्पलेट्स तय है कि क्या वे वैश्विक जानकारी के लिए उपयोग है, दृश्य कार्यों
उदाहरण में है नीचे मैं अपने समस्या से निपटने के - में और एक समस्या मैं आमतौर पर सामना करना पड़ता है, लोड हो रहा है - इस MIN_TIME_TEST चर में लोड हो रहा है यूआरएल जो मेरे पर्यावरण सी बदलते हैं hanges।
मैं 4 वातावरण है - 2 देव और 2 उत्पादन:
- देव: django-वेब सर्वर, यूआरएल: स्थानीय होस्ट: 8000
- देव: Apache वेब सर्वर: यूआरएल: sandbox.com ->
- प्रॉड सैंडबॉक्स सर्वर 127.0.0.1 पर ले कर, यूआरएल: sandbox.domain.com
- प्रॉड सर्वर: यूआरएल: domain.com
मैं अपने सभी परियोजनाओं 01,232 पर ऐसासभी यूआरएल को फ़ाइल में रखें, global_settings.py ताकि यह कोड से पहुंचा जा सके। मैं एक कस्टम टेम्पलेट टैग {% site_url%} परिभाषित करता हूं जो किसी भी टेम्पलेट में लोड किया जा सकता है (वैकल्पिक रूप से)
मैं global_settings नामक एक ऐप बनाता हूं, और सुनिश्चित करता हूं कि यह मेरी सेटिंग्स में शामिल है। INSTALLED_APPS tuple।
Django एक विधि प्रस्तुत करना() बताता है कि कैसे डेटा प्रदर्शित किया जाना चाहिए साथ नोड्स में टेम्प्लेटेड पाठ संकलित -। मैं एक उद्देश्य यह है कि नाम में पारित के आधार पर मेरे global_settings.py में मानों returnning द्वारा डेटा renders बनाया
यह इस तरह दिखता है: मेरे उदाहरण और अपने उदाहरण के लिए min_test_time के लिए SITE_URL:
from django import template
import global_settings
class GlobalSettingNode(template.Node):
def __init__(self, settingname):
self.settingname = settingname;
def render(self, context):
if hasattr(global_settings, self.settingname):
return getattr(global_settings, self.settingname)
else:
raise template.TemplateSyntaxError('%s tag does not exist' % self.settingname)
अब, global_settings.py में मैं एक जोड़ी टैग रजिस्टर। इस तरह, जब किसी टेम्पलेट से {% min_time_test%} को बुलाया जाता है, तो यह get_min_time_test को कॉल करेगा जो मान = 5 में लोड करने का संकल्प करता है। मेरे उदाहरण में, {% site_url%} एक नाम-आधारित लुकअप करेगा ताकि मैं एक ही समय में परिभाषित सभी 4 यूआरएल रख सकूं और चुन सकूं कि मैं किस पर्यावरण का उपयोग कर रहा हूं। Django के सेटिंग्स में निर्मित बसों का उपयोग करने के बजाय यह मेरे लिए अधिक लचीला है। डेबग = सही/गलत ध्वज।
from django import template
from templatenodes import GlobalSettingNode
register = template.Library()
MIN_TIME_TEST = 5
DEV_DJANGO_SITE_URL = 'http://localhost:8000/'
DEV_APACHE_SITE_URL = 'http://sandbox.com/'
PROD_SANDBOX_URL = 'http://sandbox.domain.com/'
PROD_URL = 'http://domain.com/'
CURRENT_ENVIRONMENT = 'DEV_DJANGO_SITE_URL'
def get_site_url(parser, token):
return GlobalSettingNode(CURRENT_ENVIRONMENT)
def get_min_time_test(parser, token):
return GlobalSettingNode('MIN_TIME_TEST')
register.tag('site_url', get_site_url)
register.tag('min_time_test', get_min_time_test)
ध्यान दें कि यह काम करने के लिए, Django global_settings.py उम्मीद कर रही है एक अजगर अपने Django एप्लिकेशन के तहत templatetags बुलाया पैक पर मौजूद होने की। यहाँ मेरे Django एप्लिकेशन global_settings कहा जाता है, तो मेरे निर्देशिका संरचना की तरह दिखता है:
/project-name/global_settings/templatetags/global_settings.py आदि
अंत टेम्पलेट चुनता वैश्विक सेटिंग्स में है या नहीं लोड करने के लिए है कि क्या , जो प्रदर्शन के लिए फायदेमंद है। Global_settings में पंजीकृत सभी टैग का पर्दाफाश करने के लिए इस पंक्ति को अपने टेम्पलेट में जोड़ें।py:
{% load global_settings %}
अब, अन्य परियोजनाओं MIN_TIME_TEST या इन परिवेशों उजागर बस आपको यह एप्लिकेशन इंस्टॉल कर सकते हैं की जरूरत है कि =)
धन्यवाद, यह वास्तव में वह दिशा है जिसे मैं जाना चाहता हूं। लेकिन कृपया मेरी स्पष्टीकरण/अन्य प्रश्न देखें, यानी मैं सभी स्थिरांकों को दो बार सूचीबद्ध किए बिना आप क्या कह सकता हूं? –
उन्हें सभी को एक शब्दकोश में लपेटें और फिर उस शब्दकोश को संदर्भ में रखें। आप उन्हें डॉट नोटेशन के माध्यम से एक्सेस करेंगे। उदाहरण: {{yourDict.yourConstant}} –