Jinja2

2012-08-14 18 views
12

में एक सूची के लिए परीक्षण जहां तक ​​मैं देख सकता हूं, परीक्षण करने का कोई तरीका नहीं है कि कोई वस्तु Jinja2 में एक सूची उदाहरण है या नहीं। सबसे पहले, क्या यह सही और दूसरी बात है, क्या किसी ने Jinja2 में कस्टम टेस्ट/एक्सटेंशन लागू किया है? कोई भी मदद बहुत अच्छी रहेगी।Jinja2

उत्तर

9

आप आसानी से jinja2 में एक कस्टम फ़िल्टर कर सकते हैं।

सबसे पहले आप परीक्षा पद्धति बनाने के लिए:

def is_list(value): 
    return isinstance(value, list) 

और एक कस्टम फ़िल्टर के रूप में जोड़ें:

j = jinja2.Jinja2(app) 
j.environment.filters.update({ 
     'is_list': is_list, 
}) 
0

जिंजा कई builtin परीक्षण है। आप शायद iterable देख रहे हैं।

{% if var is iterable %} 
+5

एक स्ट्रिंग भी पुनरावर्तनीय है, इसलिए यह – pors

+0

काम नहीं करेगा, मैंने 'अनुक्रम' परीक्षण भी देखा है, लेकिन यह एक स्ट्रिंग को अनुक्रम भी मानता है। –

18

मैं इस {% if var is iterable and var is not string %}

+1

मेरे मामले में '{% अगर var स्ट्रिंग%} है}' पूरी तरह से काम किया; धन्यवाद। – berto

-1

मेरी सेटअप में है जैसे कि यह किया था, मैं या तो एक स्ट्रिंग या जिंजा टेम्पलेट में आने से तार की सूची होने के लिए एक मूल्य के लिए चाहते हैं। तो वास्तव में जो मैंने परवाह की थी वह स्ट्रिंग बनाम सूची नहीं थी, लेकिन एकल आइटम बनाम एकाधिक आइटम। यदि आपका उपयोग केस समान है तो यह उत्तर मदद कर सकता है।

चूंकि "सूची है" के लिए अंतर्निहित परीक्षण नहीं है? जो तारों को भी खारिज कर देता है, मैंने एपीआई डिज़ाइन से एक पैटर्न उधार लिया और पाइथन पक्ष की सूची में एकल ऑब्जेक्ट्स को लपेट लिया और फिर जिन्जा पक्ष पर सूची की लंबाई की जांच की।

पायथन:

context = { ... } 

# ex. value = 'a', or ['a', 'b'] 
if not isinstance(value, list): 
    value = [value] 

context['foo'] = value 

जिंजा:

{% if foo|length == 1 %} 
    single-item list 
{% elif foo|length > 1 %} 
    multi-item list 
{% endif %} 

और अगर सभी आप क्या करना चाहते प्रदर्शन प्रयोजनों के लिए एक आइटम विभाजक जोड़ने है, तो आप स्पष्ट लंबाई की जांच और बस {{ value|join(', ') }} छोड़ सकते हैं।

+0

ऐसा लगता है कि इस उत्तर को किसी कारण से डाउनवोट प्राप्त हुआ है। यह मेरे लिए ठीक काम करता है, लेकिन अगर कोई आपके लिए काम नहीं करता है तो एक टिप्पणी जोड़ने में संकोच न करें। –