मैं Django में एक कस्टम टैग लिख रहा हूं जिसे उपयोगकर्ता सत्र में संग्रहीत मूल्य आउटपुट करना चाहिए, लेकिन मुझे कस्टम टैग फ़ंक्शन के भीतर सत्र ऑब्जेक्ट तक पहुंचने का कोई तरीका नहीं मिल रहा है। क्या ऐसा करने का कोई तरीका है, मैन्युअल रूप से संदर्भ ऑब्जेक्ट को सत्र ऑब्जेक्ट को असाइन किए बिना?Django में, क्या वर्तमान उपयोगकर्ता सत्र को कस्टम टैग के भीतर से एक्सेस करना संभव है?
उत्तर
आप अपने settings.py फ़ाइल में अनुरोध संदर्भ प्रोसेसर जोड़ने के लिए सक्षम होना चाहिए:
TEMPLATE_CONTEXT_PROCESSORS = ("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request',)
यह कस्टम फ़ाइल जोड़ने के बिना, वर्तमान उत्तर के समान ही काम करेगा। http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
आप उपयोगकर्ता की जानकारी हड़पने के लिए और एक स्थानीय धागे से संग्रहीत, और फिर अपने टैग की परिभाषा के साथ उपयोग मिडलवेयर उपयोग कर सकते हैं:
आप कस्टम संदर्भ प्रोसेसर के साथ ऐसा कर सकते हैं (http://docs.djangoproject.com/en/dev/ref/templates/api/ देखें)
इस मामले में, आप अपने settings.py फ़ाइल के रूप में एक ही स्तर पर context_processors.py नामक एक नई फ़ाइल बनाने चाहते हैं, युक्त
def add_session(request):
return {'session': request.session}
फिर, अपने settings.py फ़ाइल में, जोड़ें:
TEMPLATE_CONTEXT_PROCESSORS = ("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'context_processors.add_session',)
अब आप अपने कस्टम टैग में संदर्भ के लिए [ 'सत्र'] का उल्लेख करने में सक्षम हो जाएगा।
ध्यान दें कि यह केवल निम्न कोड के रूप में, एक RequestContext सौंपा साथ गाया टेम्पलेट्स के लिए काम करेंगे:
def test(request):
return render_to_response('test.html',{}, context_instance=RequestContext(request))
मैं इस उपयोगी पाया।
कोई अपराध नहीं है, जैसा कि ऐसा लगता है कि सेबस्टियन एक बिंदु पर एक उपयोगी हैक था, लेकिन एडमिन में उपयोगकर्ता डेटा तक पहुंचने के बारे में ब्लॉग एंट्री में 24 दिसंबर को अजीब रूप से पर्याप्त, Django के रिलीज मैनेजर जेम्स बेनेट, यह कहना था about using the threadlocal hack:
एक बड़ी वसा अस्वीकरण: इन प्रकार की विशेषताओं के लिए बहुत सारे उपयोग और संभावित उपयोग हैं। उनमें से कई गलत और बेवकूफ हैं और आपको उनकी कोशिश नहीं करनी चाहिए। ... इसके अलावा, आप कभी-कभी किसी को यह सुझाव देंगे कि इन सुविधाओं को "थ्रेडलोकल हैक" के नाम से जाना जा सकता है; इस मूल रूप से request.user को जादुई वैश्विक रूप से उपलब्ध चर के प्रकार में चिपकाना शामिल है, और अगर आप नहीं जानते कि आप क्या कर रहे हैं तो इसका उपयोग करने के लिए एक बहुत ही बुरी चीज है। यह आमतौर पर उपयोग करने के लिए एक बहुत ही बुरी चीज है, भले ही आप जानते हैं कि आप क्या कर रहे हैं, क्योंकि आप शायद ऐसा कर रहे हैं क्योंकि आप आलसी हैं और आपको यह सुनिश्चित करने की तरह महसूस नहीं होता है कि आप सही तरीके से जानकारी पास करते हैं। तो अगर आप किसी को यह सुझाव देते हुए देखते हैं कि आप इसे "थ्रेडलोकल" का उपयोग करके करते हैं, तो उस व्यक्ति को अनदेखा करें।
कह ऐसा नहीं है कि आप सेबस्टियन अनदेखा कर देना चाहिए, लेकिन यह सार्थक अन्य तरीके का पीछा करने के बजाय threadlocal जो एक सबसे अच्छा अभ्यास नहीं माना जाता है का उपयोग कर हो सकता है।
यह एक महत्वपूर्ण बात है, लेकिन मेरा सुझाव है चाहिए कि प्रोग्रामर पर शायद श्री बेनेट की टिप्पणी शायद उन्हें" सुस्त और आप जानकारी ठीक से चारों ओर से पारित सुनिश्चित lik नहीं लग रहा है "पर उपलब्ध है पूरी तरह से नहीं है निष्पक्ष। Django में एक फिर से होने वाली समस्या यह पता लगा रही है कि जानकारी को सही तरीके से कैसे पास किया जाए। आम तौर पर यह आलसी होने के बारे में नहीं बल्कि आपको आवश्यक चरों तक पहुंच प्राप्त करने के बारे में नहीं है। ने कहा कि; वह स्पष्ट रूप से सही है, कि थ्रेडलोकल हैक एक बहुत बुरी चीज है। – Teekin
django-annoying से render_to डेकोरेटर का उपयोग करना (के रूप में another question on stackoverflow में देखा) सबसे अच्छा विकल्प हो करने के लिए
- 1. Django संदर्भ प्रोसेसर: क्या ContextProcessor में वर्तमान संदर्भ का उपयोग करना संभव है?
- 2. कस्टम प्राधिकरण विशेषता से भूमिकाएं एक्सेस करना
- 3. {% If%} {% else%} टैग के भीतर Django {%%%} टैग के साथ?
- 4. Django फॉर्मेट वर्तमान उपयोगकर्ता
- 5. एएसपी.नेट क्या इवल() का उपयोग कर सर्वर टैग के भीतर विधियों को कॉल करना संभव है?
- 6. क्या Django के {% url%} टेम्पलेट टैग के माध्यम से क्वेरी पैरामीटर पास करना संभव है?
- 7. क्या वसंत सुरक्षा सत्र को अमान्य करना संभव है?
- 8. django में कस्टम उपयोगकर्ता मॉडल व्यवस्थापक
- 9. Django - सरल कस्टम टेम्पलेट टैग उदाहरण
- 10. django टेम्पलेट में यूआरएल टैग को यूआरएल टैग पास करना
- 11. उपयोगकर्ता को एक्सेस करना। मास्टर पेज
- 12. क्या Google Analytics सत्र को मैन्युअल रूप से समाप्त करना संभव है?
- 13. Django: अंतर्निहित टैग बनाम कस्टम समावेशन टैग
- 14. प्रति उपयोगकर्ता सत्र सत्र को अनुकूलित करना - एएसपी.नेट
- 15. Django - एक दृश्य से टैग शामिल करना
- 16. टेम्पलेट टैग में वर्तमान उपयोगकर्ता कैसे प्राप्त करें?
- 17. क्या Django और Node.Js का उपयोग करना संभव है?
- 18. क्या गीथब पर परियोजनाओं को 'टैग' करना संभव है?
- 19. उपयोगकर्ता को एक आजीवन पोर्टल से एक्सेस करना?
- 20. क्या P4Eclipse के भीतर P4TICKET को बदलना संभव है?
- 21. उपयोगकर्ता नियंत्रण से मास्टरपेज प्रॉपर्टी एक्सेस करना
- 22. क्या डेटाबेस से django मॉडल उत्पन्न करना संभव है?
- 23. Django - एक कस्टम फ़िल्टर
- 24. क्या django मॉडल पर .objects को ओवरराइड करना संभव है?
- 25. क्या उपयोगकर्ता को गिट रेपो पर स्विच करना संभव है?
- 26. क्या किसी दुर्भावनापूर्ण उपयोगकर्ता को $ _SESSION संपादित करना संभव है?
- 27. क्या एक Django सत्र धागा सुरक्षित है?
- 28. क्या jQuery निर्धारित कर सकता है कि वर्तमान में उपयोगकर्ता के ब्राउज़र दृश्य में कौन से divs वर्तमान में हैं?
- 29. उपयोगकर्ता मॉडल के लिए Django कस्टम प्रबंधक
- 30. ओपनसीएल - क्या कर्नेल के भीतर से किसी अन्य फ़ंक्शन को आमंत्रित करना संभव है?
मैं इस दृष्टिकोण का जवाब स्विचिंग, यह क्लीनर है की सलाह देते हैं लगता है। –
मेरे पास पहले से ही प्रीप्रोसेसर था, लेकिन सत्र संपत्ति को अनदेखा कर दिया होगा। डी 'ओह! धन्यवाद। – knabar
मैंने इसे जोड़ा है, लेकिन मैं टेम्पलेट के भीतर से अनुरोध का उपयोग कैसे करूं? context.session मौजूद नहीं है। – Wouter