django में अपना स्वयं का संदर्भ प्रोसेसर बनाना


81

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

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

मेरी सेटिंग्स फ़ाइल इस तरह दिखती है

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", 
)

जैसा कि आप देख सकते हैं, मेरे पास 'reference_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")

जवाबों:


54

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

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

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

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

उपरोक्त दृश्य में सूचीबद्ध संदर्भ प्रोसेसर का उपयोग नहीं किया जाएगा TEMPLATE_CONTEXT_PROCESSORS। सुनिश्चित करें कि आप RequestContextऐसा आपूर्ति कर रहे हैं :

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

1
'सन्दर्भ_संख्या' वह है जो गायब था! धन्यवाद टीएम
दीवाना हो गया

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

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

क्या मैं संदर्भ का अनुरोध करने के लिए अपना दृष्टिकोण संशोधित कर सकता हूं?
दीवाना हो गया

3
@ टी.एम. return render_to_response('template.html', context_instance=RequestContext(request))पुराने fasion, मुझे लगता return render(request,'template.html')है कि अधिक DRY है
suhailvs

29

Django डॉक्स के अनुसार, आप renderreference_instance तर्क के साथ render_to_response के बजाय शॉर्टकट के रूप में उपयोग कर सकते हैं :

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


दरअसल, इन दिनों जो संभव है।
फेबस्प्रो 12

9

Django 1.8 के बाद से आप अपने कस्टम संदर्भ प्रोसेसर को इस तरह पंजीकृत करते हैं:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            'templates'
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'www.context_processors.instance',
            ],
        },
    },
]

अपने संदर्भ प्रोसेसर को संभालने में app wwwमें हैcontext_processors.py


2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.