django

2010-07-11 20 views
17

में प्रत्येक पृष्ठ पर सामान्य शब्दकोश डेटा को कैसे पास करें मेरे पास प्रत्येक पृष्ठ पर प्रदर्शित करने के लिए एक सामान्य डेटा {लॉग-इन उपयोगकर्ता का संदेश नंबर) है। मैं बस के रूप मेंdjango

dict={'messagenumber':5} 
return render_to_response('template.html',dict,context_instance=RequestContext(request)) 

टेम्पलेट पारित कर सकते हैं लेकिन अगर मैं इस dict डेटा बहुत पेज को पारित किया है यह कठिन लग रहा है। क्या प्रत्येक पृष्ठ पर आम डेटा पास करने का कोई आसान तरीका है?

धन्यवाद

उत्तर

16

यह मुझे दूर करता है कि यह कितना आम है। आप context processors मेरे दोस्त का उपयोग करना चाहते हैं!

तो की तरह, बनाने के लिए बहुत आसान:

def messagenumber_processor(request): 
    return {'messagenumber': 5} 

messagenumber के बाद से उपयोगकर्ता के आधार पर एक गतिशील चर है, तो आप request.user से प्राप्त करने में कठिनाई द्वारा डेटाबेस से डेटा खींच सकता है के रूप में आप प्रत्येक के भीतर request पर पहुंच सकते हैं संदर्भ प्रोसेसर।

फिर, सेटिंग.py में अपने TEMPLATE_CONTEXT_PROCESSORS में जोड़ें और आप सभी सेट हैं :-) आप संदर्भ प्रोसेसर के भीतर डेटाबेस ऑपरेशन या अन्य तर्क के किसी भी रूप को भी कर सकते हैं, इसे आज़माएं!

+1

दो टिप्पणियां: 1) आप अपने MIDDLEWARE_CLASSES request.user काम करने के लिए आदेश में स्थापित करने में django.contrib.auth.middleware.AuthenticationMiddleware की आवश्यकता होगी। 2) संदर्भ के रूप में django.template.RequestContext उदाहरणों के साथ प्रदान किए गए केवल टेम्पलेट्स में संदर्भ प्रोसेसर लागू होंगे। –

+0

धन्यवाद, कुछ और प्रश्न। *) मैं इस विधि को किसी भी स्थान पर रख सकता हूं (किसी भी मेरी दृश्य फ़ाइलों में)? *) इस प्रोसेसर को 'myproject.myapp.myview.messagenumber_processor' जोड़ना? और *) इस डेटा को टेम्पलेट में कैसे कॉल करें? request.messagenumber_processor? – icn

+0

@ जोसेफ मान्य अंक, जो मैंने पोस्ट किए गए लिंक में कहा है, लेकिन धन्यवाद! @xlione आप तकनीकी रूप से इसे अपने प्रोजेक्ट में डाल सकते हैं, लेकिन इसे संदर्भ के लिए 'context_processors.py' में रखने की अनुशंसा की जाती है जो इन संदर्भ प्रोसेसर के साथ सौदा करेगा। अपने टेम्पलेट में डेटा को कॉल करने के लिए, संदर्भ प्रोसेसर में वापस आने वाले निर्देश का संदर्भ लें। उदाहरण के लिए यदि मैं अपने टेम्पलेट में '{{messagenumber}} डालता हूं, तो यह' 5' मानता है कि मैंने अपने संदर्भ प्रोसेसर को सही तरीके से लिंक किया है। – Bartek

0

इसे संभालने के लिए अपना स्वयं का कार्य लिखें।

def render_with_message_number(template, message_number, request): 
    return render_to_response(template, dict(messagenumber=message_number), 
     context_instance=RequestContext(request)) 

और dict शैडो नहीं है।

17

बस context_processor.py में एक अजगर context_processor.py

बुलाया फ़ाइल किसी के समय की बचत करने के लिए नया है, तो django को

settings.py

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", 
"django.core.context_processors.debug", 
"django.core.context_processors.i18n", 
"django.core.context_processors.media", 
"django.core.context_processors.static", 
"django.contrib.messages.context_processors.messages", 
"home.context_processor.remote_ip") 
घर आवेदन में

, बनाने जोड़ने के एक इस तरह का कार्य:

def remote_ip(request): 
    return {'remote_ip': request.META['REMOTE_ADDR']} 

इसे टेम्पलेट पसंद में उपयोग करें ई {{remote_ip}}

+1

मैं django के लिए नया हूँ, आपकी व्याख्या बहुत उपयोगी है, धन्यवाद – Prabu