2013-05-04 11 views
12

किसी कारण से, टेम्पलेट में {{ request.session.session_key }} कर मुझे None मान देता है। कुछ खोज के बाद, this post कि request.session._session_id का उपयोग कर, लेकिन टेम्पलेट में उपयोग करते हुए कि उल्लेख किया मुझे एक त्रुटि देता है भर में आया था:Django 1.5 सत्र कुंजी कोई नहीं है

Variables and attributes may not begin with underscores: 'request.session._session_key'

Django में सत्र की मेरी समझ उस पल किसी उपयोगकर्ता द्वारा पृष्ठ (किसी भी पेज) को लोड करता है, यहां तक ​​कि है अगर वह गुमनाम है, तो उस सत्र में सत्र_आईडी असाइन की जाती है। क्या मेरी समझ गलत है और यह भी है, जहां using[SESSION_SAVE_EVERY_REQUEST] आने वाला है?

मैं अपने सत्र स्टोर के रूप में डेटाबेस बैकएंड का उपयोग कर रहा हूं।

यह अभी भी {{ request.session.session_key }} का उपयोग कर सत्र कुंजी का उपयोग करने के लिए संभव है:

उत्तर

30

अपने ही सवाल का जवाब करने के लिए। हालांकि, docs उल्लेख करते हैं कि एक सत्र केवल तभी बनाया जाएगा जब आपने सत्र को सहेजा/संशोधित किया हो।

By default, Django only saves to the session database when the session has been modified – that is if any of its dictionary values have been assigned or deleted:

तो मेरे मामले में, सत्र सेट नहीं किया जा रहा था क्योंकि मैं इसे जोड़ नहीं रहा था। SESSION_SAVE_EVERY_REQUEST का उपयोग करके वास्तव में वैश्विक स्तर पर समस्या का समाधान होगा। मेरे उपयोग के मामले में, मुझे केवल एक विशेष दृश्य समारोह पर इसकी आवश्यकता थी, इसलिए यह करने का एक साधारण मामला था:

if not request.session.get('has_session'): 
    request.session['has_session'] = True 
+0

अच्छी छोटी सी बात। –

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