2010-08-07 13 views
23

मैं अपने settings.py फ़ाइल में किन्हीं विन्यास जानकारी डाल करने के लिए सक्षम होना चाहते हैं - साइट का नाम, साइट यूआरएल, आदिका उपयोग Django सेटिंग्स

मैं ऐसा करते हैं, कैसे मैं तो पहुंचा जा सकता है जैसी चीजों टेम्पलेट्स में उन सेटिंग्स?

धन्यवाद

उत्तर

44

के अपने 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) 
+1

मैं इन सेटिंग्स का उपयोग अपने बेस टेम्पलेट में करना चाहता हूं, जिससे अन्य सभी का उत्तराधिकारी है, और मैं थोड़ा सा आलसी हूं y। क्या डिफ़ॉल्ट व्यवहार करने का कोई तरीका है ताकि render_to_response केवल एक संदर्भ के बजाय RequestContext का उपयोग करेगा? अगर मैं इसकी मदद कर सकता हूं तो मैं अपने पूरे कोड में एक ही पैरामीटर जोड़ना नहीं चाहता हूं। – Roger

+1

आप render_to_response के आस-पास एक रैपर फ़ंक्शन लिख सकते हैं जो अतिरिक्त तर्क के रूप में अनुरोध लेता है, और उस फ़ंक्शन में: tmp_dict = RequestContext (अनुरोध), tmp_dict.update (response_dict) render_to_response ('... html', tmp_dict) लौटा सकता है - यह हो सकता है – Geradeausanwalt

+0

ऑप्शन के माध्यम से खोज-और-प्रतिस्थापन के माध्यम से हर जगह अपना कोड बदलना आसान बनाता है, सभी को धन्यवाद। – Roger

2

यदि आपको केवल दो जोड़े के लिए सेटिंग या दो की आवश्यकता है विचार, संदर्भ प्रोसेसर अधिक हो सकता है क्योंकि यह उन्हें आपके ऐप में सभी दृश्यों में जोड़ देगा। लेकिन अगर इसका उपयोग कई टेम्पलेट्स में किया जाता है, तो प्रतियोगिता प्रोसेसर जाने का रास्ता है।

सरल एक बंद मामले के लिए सिर्फ पारित जो कुछ भी स्थापित करने के लिए आप टेम्पलेट देखने से की जरूरत है:

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 }} 
4

तो एक वर्ग का उपयोग कर -आधारित दृश्य:

# 
# 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 }} 
संबंधित मुद्दे