2011-02-23 22 views
8

यह एक सुपर सरल होना चाहिए। मुझे पूरा यकीन है कि मैंने उद्देश्यों को जोड़ने के लिए अपने टेम्पलेट्स में अतीत में सफलतापूर्वक इस संदर्भ का उपयोग किया है। मेरा विश्वास था कि यह किसी भी तरह या अन्य अनुरोधकॉन्टेक्स्ट उदाहरण में बनाया गया था।Django {{site}} टेम्पलेट संदर्भ काम नहीं कर रहा है?

मेरी सेटिंग्स फ़ाइल में SITE_ID रिकॉर्ड सही है। मैंने अपने सभी विचारों के लिए एक RequestContext उदाहरण शामिल किया है और मैंने contrib.auth ऐप शामिल किया है, जो इस मामले में प्रासंगिक हो सकता है।

क्या {{site}} संदर्भ किसी भी तरह से बनाया गया है या क्या मुझे उदाहरण के लिए साइट ऑब्जेक्ट से पूछताछ करनी चाहिए?

धन्यवाद सब, ब्रेंडन

उत्तर

24

Django स्पष्ट होने का प्रयास है, इसलिए यह संभावना नहीं है कि यह स्वयं के द्वारा किसी भी संदर्भ स्थापित करेगा। संदर्भ प्रोसेसर होना चाहिए जो settings.CONTEXT_PROCESSORS में सेट करता है। मैंने django.core.context_processors और django.contrib.sites चेक किया है और ऐसा कोई प्रोसेसर नहीं है जो site सेट करता है। तो आपके पास शायद एक तृतीय-पक्ष संदर्भ प्रोसेसर था जो ऐसा करता है।

यह लिखने के लिए बहुत ही आसान है संदर्भ प्रोसेसर:

myproject/context_processors.py: 

    from django.contrib.sites.models import Site 

    def site(request): 
     return { 
      'site': Site.objects.get_current() 
     } 

myproject/settings.py: 

    CONTEXT_PROCESSORS += ['myproject.context_processors.site'] 
+0

धन्यवाद स्किमेंटस, जो निश्चित रूप से मेरे प्रश्न का उत्तर देता है। मैंने किसी तीसरे पक्ष के संदर्भ प्रोसेसर का उपयोग नहीं किया, इसलिए साइट का उपयोग करने की पिछली क्षमता अभी भी एक रहस्य है। मैं उसमें देखने जा रहा हूँ। हालांकि, मेरे समग्र प्रश्न का बड़ा जवाब। – Ben

2

यह अभ्यस्त एक कस्टम संदर्भ प्रोसेसर

def site(request): 
    return {'site': Site.objects.get_current()} 

नोट बनाने के लिए है कि get_current() SITE_ID, जिसमें एक वैश्विक सेटिंग है का उपयोग करता है चोट परियोजना (सेटिंग्स.py में परिभाषित)। यदि आप बहु-साइट्स का समर्थन करने जा रहे हैं, तो आपको मौजूदा साइट के उपयोग के आधार पर इसके मूल्य को बदलने के लिए SITE_ID चर की आवश्यकता है।

Here एक अच्छा स्निपेट है जो इसे काम करेगा।

संबंधित मुद्दे