2012-12-03 13 views
5

में अग्रणी अंडरस्कोर के साथ dict तत्वों तक पहुंचने के लिए मैं अंडरस्कोर चरित्र से शुरू होने वाली कुंजियों के साथ एक तीर के तत्वों तक पहुंचने का प्रयास कर रहा हूं। उदाहरण के लिए:Django टेम्पलेट्स

my_dict = {"_source": 'xyz'}

मैं एक Django टेम्पलेट में उन तक पहुंचने की कोशिश कर रहा हूँ। जाहिर है, मुझे एहसास है कि आप Django टेम्पलेट से अंडरस्कोर पायथन वैरिएबल तक नहीं पहुंच सकते हैं (क्योंकि उन्हें पायथन में निजी माना जाता है) लेकिन यह एक dict ऑब्जेक्ट है जहां कोई अपरिवर्तनीय वस्तु मान्य कुंजी है।

मैं {{my_dict._source}} का उपयोग करके एक Django टेम्पलेट में उपर्युक्त निर्देश तक नहीं पहुंच सकता, इसलिए मुझे लगता है कि Django इसे रोक रहा है। क्या यह सही है?

मुझे उम्मीद है कि डीजेंगो वैरिएबल के साथ कुछ साँस लेता है जो अंडरस्कोर के साथ शुरू होता है जैसे कि अभी भी लुकअप लुकअप (पहली बात माना जाता है) करना है लेकिन एक अंडरस्कोर प्रीफिक्स्ड वैरिएबल के बाद एट्रिब्यूट लुकअप, विधि कॉल और सूची इंडेक्स लुकअप करने से इनकार करता है अमान्य होगा हालांकि मैं आशा खो रहा हूँ हालांकि।

रिकॉर्ड के लिए, मुझे पता है कि कोई व्यक्ति केवल ताना को बदलने का सुझाव देगा, लेकिन वास्तव में यह एक बहुस्तरीय शब्दकोश है जिसे कच्चे पुस्तकालय द्वारा लौटाया जाता है जब एलएस्टिक खोज उदाहरण पर आरईएसटी एपीआई अनुरोध निष्पादित किया जाता है।

+0

अगर यह वास्तव में है django आप निजी वापस जाने के लिए एक कस्टम टेम्पलेट टैग बना सकते हैं वर। – Colleen

+0

"django टेम्पलेट अंडरस्कोर वर्र्स" की एक Google खोज से पता चलता है: https://groups.google.com/forum/?fromgroups=#!topic/django-users/J8c0j2_iEcc - यानी हाँ, आपको एक कस्टम टेम्पलेट बनाना होगा टैग। हालांकि यह धागा पुराना है, मुझे संदेह है कि कार्यक्षमता बदल गई है। – Colleen

+0

यह एक निजी var नहीं है, यह एक पूरी तरह से कानूनी dict कुंजी है, कुछ ऐसा जो कि एक लुकअप लुकअप के साथ सुलभ होना चाहिए। वास्तव में एक टेम्पलेट टैग बनाने से बचने की कोशिश कर रहा है। विशेष रूप से जब से ऑब्जेक्ट्स ऑब्जेक्ट्स {{my_dict.hits._source._text}} की तरह गहरी हो सकती हैं। – rstuart85

उत्तर

11

The docs mention है कि आप एक अंडरस्कोर से एक चर शुरू नहीं कर सकते हैं:

चर नाम कोई पत्र (AZ), किसी भी अंकों (0-9), एक अंडरस्कोर से मिलकर चाहिए (लेकिन वे नहीं करना चाहिए अंडरस्कोर से शुरू करें) या एक डॉट।

लेकिन आप आसानी से शब्दकोश का get विधि नकल करने के लिए एक custom template filter लिख सकते हैं:

@register.filter(name='get') 
def get(d, k): 
    return d.get(k, None) 

और

{{ my_dict|get:"_my_key" }} 
+0

समाधान के लिए धन्यवाद! मैंने उपयोगी अंडरस्कोर फ़िल्टर एकत्र करने के लिए पैकेज पर काम करना शुरू किया। मैं तुम्हारा जिक्र कर रहा हूँ https://github.com/halfnibble/django-underscore-filters –

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