django

2010-05-23 16 views
58

में अपना स्वयं का संदर्भ प्रोसेसर बनाना मैं एक ऐसे बिंदु पर आया हूं जहां मुझे अपने सभी विचारों (ज्यादातर कस्टम प्रमाणीकरण प्रकार चर) में कुछ चर पारित करने की आवश्यकता है।django

मुझे बताया गया कि मेरा खुद का संदर्भ प्रोसेसर यह करने का सबसे अच्छा तरीका था, लेकिन मुझे कुछ समस्याएं हैं।

मेरी सेटिंग्स फ़ाइल इस

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.contrib.messages.context_processors.messages", 
    "sandbox.context_processors.say_hello", 
) 

तरह लग रहा है जैसा कि आप देख सकते हैं, मैं एक मॉड्यूल 'context_processors' कहा जाता है और 'say_hello' कहा जाता है कि भीतर एक समारोह है।

मैं सही ग्रहण करने के लिए कर रहा हूँ अब मैं अपने विचारों के भीतर निम्न कर सकते हैं की तरह

def say_hello(request): 
     return { 
      'say_hello':"Hello", 
     } 

लग रहा है?

{{ say_hello }} 

अभी, यह मेरे टेम्पलेट में कुछ भी प्रस्तुत नहीं करता है।

मेरा विचार

from django.shortcuts import render_to_response 

def test(request): 
     return render_to_response("test.html") 

उत्तर

41

तरह संदर्भ प्रोसेसर लिखा है आप काम करना चाहिए लग रहा है। समस्या आपके विचार में है।

क्या आप सकारात्मक हैं कि आपका विचार RequestContext के साथ प्रस्तुत किया जा रहा है?

उदाहरण के लिए:

def test_view(request): 
    return render_to_response('template.html') 

दृश्य के ऊपर TEMPLATE_CONTEXT_PROCESSORS में सूचीबद्ध संदर्भ प्रोसेसर का उपयोग नहीं होगा।

def test_view(request): 
    return render_to_response('template.html', context_instance=RequestContext(request)) 
+1

'context_instance' क्या गुम था! धन्यवाद टीएम – dotty

+0

अनुवर्ती, मुझे इस संदर्भ_instance की आवश्यकता कैसे है? अगर मैं django की ऑथ सिस्टम का उपयोग करता हूं तो मुझे इसकी आवश्यकता क्यों नहीं है? – dotty

+0

Django के अंतर्निहित विचार आपके लिए इसे संभालते हैं (वे 'RequestContext' का उपयोग करते हैं)। आपके द्वारा किए गए संदर्भ प्रोसेसर के बारे में सोचें। यह तर्क के रूप में 'अनुरोध' लेता है। इसका मतलब है कि आपको किसी भी तरह से प्रतिपादन तर्क को वर्तमान अनुरोध देना होगा। 'RequestContext' मूल रूप से सभी संदर्भ प्रोसेसर के माध्यम से लूपिंग के सरल तर्क को संभालता है और वर्तमान अनुरोध को पास करता है, फिर परिणाम के साथ पृष्ठ संदर्भ अद्यतन करता है। –

24

django docs के अनुसार आप context_instance तर्क के साथ render_to_response के बजाय एक शॉर्टकट के रूप render उपयोग कर सकते हैं:

वैकल्पिक रूप से, render() शॉर्टकट है जो का उपयोग सुनिश्चित करें कि आप एक RequestContext तो जैसे आपूर्ति कर रहे हैं render_to_response() को एक संदर्भ_इंस्टेंस तर्क के साथ कॉल के समान है जो RequestContext के उपयोग को मजबूर करता है।

+0

दरअसल, इन दिनों संभव है। – fabspro

2

आप एक शब्दकोश की सामग्री के साथ एक टेम्पलेट को भरने के लिए Django के render_to_response() शॉर्टकट का उपयोग कर रहे हैं, अपने टेम्पलेट डिफ़ॉल्ट रूप से एक प्रसंग उदाहरण (नहीं एक RequestContext) पारित हो जाएगा। अपने टेम्पलेट प्रतिपादन में RequestContext का उपयोग करने के लिए, render() शॉर्टकट का उपयोग करें जो render_to_response() पर context_instance तर्क के साथ कॉल के समान है जो RequestContext के उपयोग को मजबूर करता है।