2012-06-06 8 views
9

मैं Google App Engine पर Jinja2 का उपयोग कर रहा हूं। मेरे पास एक सूची दृश्य है जो एक सामान्य टेम्पलेट प्रस्तुत करता है। फिलहाल, मुझे यकीन नहीं है कि मैं वास्तव में क्या प्रदर्शित करना चाहता हूं, इसलिए मैं मॉडल के प्रत्येक विशेषता को प्रदर्शित करना चाहता हूं।Jinja2 में वस्तु पर Iterate?

क्या किसी तालिका कक्ष में प्रत्येक को आउटपुट करने के लिए ऑब्जेक्ट पर पुनरावृत्ति करने का कोई तरीका है?

उदाहरण के लिए:

{% for record in records %} 
<tr> 
{% for attribute in record %} 
<td>{{ attribute }}</td> 
{% endfor %} 
</tr> 
{% endfor %} 

किसी भी सलाह की सराहना की। जैसा कि नीचे दिखाया ताकि आप jinja2 में यह कॉल कर सकते हैं

for attribute in record.properties(): 
    print '%s: %s' % (attribute, getattr(record, attribute)) 

आप संदर्भ में getattr समारोह रख सकते हैं: धन्यवाद

उत्तर

3

यह सरल अजगर कोड में चाल करना होगा

{% for record in records %} 
    <tr> 
    {% for attribute in record.properties() %} 
     <td>{{ getattr(record, attribute) }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
+3

आप जिंजा संदर्भ के लिए "getattr" आवंटित नहीं करना चाहिए, लेकिन वाक्य रचना "की तरह शब्दावली" का उपयोग करें। कृपया ऊपर मेरा जवाब देखें। मुझे लगता है कि यह प्रतिक्रिया सही नहीं है। – Metal3d

23

संदर्भ में getattr सेट करें एक बुरा विचार है (और पहले से ही अंतर्निहित फ़िल्टर attr है)। Jinja2 dict like गुणों तक पहुंच प्रदान करता है।

मुझे लगता है कि आपको क्या करना चाहिए:

{% for record in records %} 
    <tr> 
    {% for attribute in record.properties() %} 
     <td>{{ record[attribute] }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 

यह बेहतर है ...

+0

दुर्भाग्यवश – lopezdp

+0

काम नहीं कर रहा है attr के साथ भी? – Metal3d

+0

मैं loop.changed का उपयोग कर समाप्त हुआ क्योंकि मुझे यह देखने की ज़रूरत थी कि यह बदल गया है या नहीं, इसलिए शायद मैं आपके दृष्टिकोण का उपयोग करने की कोशिश कर रहा हूं। शायद मैं सिर्फ गलत उपकरण का उपयोग कर रहा था, इसलिए मेरे प्रोग्रामिंग ने काम नहीं किया ...;) – lopezdp