2012-05-22 14 views
20

मेरी html फ़ाइल में, मैं कैसे उत्पादन है कि मैं उपयोग कर रहा हूँ (मेरे डीबगिंग उद्देश्यों के लिए) क्वेरीसमूह के आकारDjango - एक टेम्पलेट

मैं कोशिश की है सकते हैं में एक क्वेरीसमूह की लंबाई दिखाने

{{ len(some_queryset) }} 

लेकिन यह काम नहीं किया। प्रारूप क्या है?

+2

एक फिल्टर कुछ भी पर लेन() कॉल करने के लिए 'length' कहा जाता है। '{{any_iterable | length}}' –

+1

@ यूजी 'टोमिता' टोमिता इस के लिए आप 'some_queryset.all | length' का उपयोग करेंगे? एसक्यूएल जेनरेट के मामले में यह इष्टतम है? 'Some_queryset.count' सभी मॉडल फ़ील्ड चुनने के बजाय 'SELECT COUNT (*)' का उपयोग करता है। मुझे नहीं पता कि यह प्रदर्शन के संदर्भ में कितना महत्वपूर्ण है, मुझे लगता है कि एक बड़ी क्वेरी_सेट के साथ कुछ महत्वपूर्ण हो सकता है? – AJP

+2

@ एजेपी हां। अगर आपको केवल गिनती मिल रही है, तो कुछ_queryset.count करें। यदि यह पहले से ही मूल्यांकन किया गया है, तो लंबाई आपको डीबी हिट बचा सकती है। –

उत्तर

41

{{ some_queryset.count }} एक प्रयास दें।

यह लेन का उपयोग करने से बेहतर है (जिसे {{ some_queryset.__len__ }} के साथ बुलाया जा सकता है) क्योंकि यह पृष्ठभूमि में उत्पन्न एसक्यूएल को केवल रिकॉर्ड के बजाय रिकॉर्ड्स की संख्या को पुनर्प्राप्त करने के लिए अनुकूलित करता है।

+0

फ़िल्टर "लंबाई" के बारे में कैसे? क्या यह वही है? https://docs.djangoproject.com/en/dev/ref/templates/builtins/#length – dannyroa

+1

समान नहीं है! आपको वास्तव में लंबाई का उपयोग करना चाहिए, मेरा जवाब जांचें: http://stackoverflow.com/a/18578147/267719 – daveoncode

+1

अब तक django टेम्पलेट्स में '__len__' की अनुमति नहीं देता है। – mehmet

19

some_queryset.count() या {{some_queryset.count}} आपके टेम्पलेट में।

len का उपयोग न करें, यह बहुत कम कुशल है। डेटाबेस उस काम को करना चाहिए। count() के बारे में प्रलेखन देखें।

हालांकि, यदि आप रिकॉर्ड पर फिर से प्रयास करने की योजना बना रहे हैं, तो आप len का उपयोग कर सकते हैं, जिसमें क्वेरीसेट को हल करने और परिणामी पंक्तियों को मुख्य स्मृति में निवासी बनाने में शामिल होगा - यह बर्बाद नहीं होगा क्योंकि आप इन पंक्तियों को वैसे भी देखेंगे। डीबी कनेक्शन विलंबता के आधार पर यह वास्तव में तेज़ हो सकता है, लेकिन आपको हमेशा मापना चाहिए।

+0

'लेन का उपयोग न करें, यह बहुत कम कुशल है': सच है, जब तक कि आप अपनी क्वेरीसेट पर फिर से चालू नहीं हो जाते। उस स्थिति में, 'गिनती' पर 'लेन' पसंद करते हैं। [और पढ़ें] (http://stackoverflow.com/questions/14327036/count-vs-len-on-a-django-queryset) – Medorator

2

बस @ Yuji'Tomita'Tomita टिप्पणी एक अलग जवाब के रूप में इसके बाद के संस्करण को उजागर करना:

एक फिल्टर length कहा जाता है कुछ भी पर len() कॉल करने के लिए नहीं है।

तो तुम इस्तेमाल कर सकते हैं:

{{ some_queryset|length }} 
संबंधित मुद्दे