मैं अपने settings.py फ़ाइल में किन्हीं विन्यास जानकारी डाल करने के लिए सक्षम होना चाहते हैं - साइट का नाम, साइट यूआरएल, आदिका उपयोग Django सेटिंग्स
मैं ऐसा करते हैं, कैसे मैं तो पहुंचा जा सकता है जैसी चीजों टेम्पलेट्स में उन सेटिंग्स?
धन्यवाद
मैं अपने settings.py फ़ाइल में किन्हीं विन्यास जानकारी डाल करने के लिए सक्षम होना चाहते हैं - साइट का नाम, साइट यूआरएल, आदिका उपयोग Django सेटिंग्स
मैं ऐसा करते हैं, कैसे मैं तो पहुंचा जा सकता है जैसी चीजों टेम्पलेट्स में उन सेटिंग्स?
धन्यवाद
के अपने settings.py
फ़ाइल में मान लीजिए आपके पास:
SITE_URL='www.mydomain.tld/somewhere/'
SITE_NAME='My site'
आप की जरूरत है कि सिर्फ एक या दो विचारों में हैं:
from django.shortcuts import render_to_response
from django.conf import settings
def my_view(request, ...):
response_dict = {
'site_name': settings.SITE_NAME,
'site_url': settings.SITE_URL,
}
...
return render_to_response('my_template_dir/my_template.html', response_dict)
आप के लिए की जरूरत है इन्हें कई ऐप्स और/या दृश्यों तक एक्सेस करें, आप कोड को सहेजने के लिए एक संदर्भ प्रोसेसर लिख सकते हैं:
जेम्स के पास online पर एक ट्यूटोरियल है।
इस साइट पर संदर्भ प्रोसेसर के कब और यदि इस साइट पर कुछ उपयोगी जानकारी here पर उपलब्ध है।
अपने my_context_processors.py
फ़ाइल तुम अंदर:
from django.conf import settings
def some_context_processor(request):
my_dict = {
'site_url': settings.SITE_URL,
'site_name': settings.SITE_NAME,
}
return my_dict
अपने
settings.py
में
वापस, ऐसा करके इसे सक्रिय:
TEMPLATE_CONTEXT_PROCESSORS = (
...
# yours
'my_context_processors.some_context_processor',
)
अपने views.py
में, एक दृश्य इतना की तरह उपयोग करते हैं:
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view(request, ...):
response_dict = RequestContext(request)
...
# you can still still add variables that specific only to this view
response_dict['some_var_only_in_this_view'] = 42
...
return render_to_response('my_template_dir/my_template.html', response_dict)
यदि आपको केवल दो जोड़े के लिए सेटिंग या दो की आवश्यकता है विचार, संदर्भ प्रोसेसर अधिक हो सकता है क्योंकि यह उन्हें आपके ऐप में सभी दृश्यों में जोड़ देगा। लेकिन अगर इसका उपयोग कई टेम्पलेट्स में किया जाता है, तो प्रतियोगिता प्रोसेसर जाने का रास्ता है।
सरल एक बंद मामले के लिए सिर्फ पारित जो कुछ भी स्थापित करने के लिए आप टेम्पलेट देखने से की जरूरत है:
from django.conf import settings
from django.shortcuts import render_to_response
def some_view(request):
val = settings.SAVED_SETTING
return render_to_response("index.html", {
'saved_setting':val
})
और के माध्यम से अपने खाके में सेटिंग तक पहुँचने:
{{ saved_setting }}
तो एक वर्ग का उपयोग कर -आधारित दृश्य:
#
# in settings.py
#
YOUR_CUSTOM_SETTING = 'some value'
#
# in views.py
#
from django.conf import settings #for getting settings vars
class YourView(DetailView): #assuming DetailView; whatever though
# ...
def get_context_data(self, **kwargs):
context = super(YourView, self).get_context_data(**kwargs)
context['YOUR_CUSTOM_SETTING'] = settings.YOUR_CUSTOM_SETTING
return context
#
# in your_template.html, reference the setting like any other context variable
#
{{ YOUR_CUSTOM_SETTING }}
मैं इन सेटिंग्स का उपयोग अपने बेस टेम्पलेट में करना चाहता हूं, जिससे अन्य सभी का उत्तराधिकारी है, और मैं थोड़ा सा आलसी हूं y। क्या डिफ़ॉल्ट व्यवहार करने का कोई तरीका है ताकि render_to_response केवल एक संदर्भ के बजाय RequestContext का उपयोग करेगा? अगर मैं इसकी मदद कर सकता हूं तो मैं अपने पूरे कोड में एक ही पैरामीटर जोड़ना नहीं चाहता हूं। – Roger
आप render_to_response के आस-पास एक रैपर फ़ंक्शन लिख सकते हैं जो अतिरिक्त तर्क के रूप में अनुरोध लेता है, और उस फ़ंक्शन में: tmp_dict = RequestContext (अनुरोध), tmp_dict.update (response_dict) render_to_response ('... html', tmp_dict) लौटा सकता है - यह हो सकता है – Geradeausanwalt
ऑप्शन के माध्यम से खोज-और-प्रतिस्थापन के माध्यम से हर जगह अपना कोड बदलना आसान बनाता है, सभी को धन्यवाद। – Roger