2010-02-07 13 views
22

मेरे पास manor_stats नामक एक डेटाबेस ऑब्जेक्ट है, जिसमें लगभग 30 फ़ील्ड हैं। ज्यादातर पंक्तियों के लिए, इनमें से अधिकतर फ़ील्ड शून्य होंगे।Django टेम्पलेट्स: किसी ऑब्जेक्ट के सभी उपलब्ध गुणों के माध्यम से लूप और प्रिंट करें?

मेरे टेम्पलेट में, मैं पंक्ति में सभी फ़ील्ड के माध्यम से लूप करना चाहता हूं, और उन फ़ील्ड के लिए प्रिंट जानकारी जो शून्य नहीं हैं।

उदाहरण के लिए, "नाम" नामक एक फ़ील्ड है: मैं केवल उन वस्तुओं के लिए <li>Name: {{ manor_stats.name }}</li> प्रिंट करना चाहता हूं जहां फ़ील्ड शून्य नहीं है। आदर्श रूप से मैं इसे निर्दिष्ट करने के बजाए कहीं भी स्वचालित रूप से "नाम:" में खींचना चाहता हूं।

मुझे पता है कि मैं {% if manor_stats.name %} का उपयोग यह जांचने के लिए कर सकता हूं कि प्रत्येक फ़ील्ड शून्य है, लेकिन मैं सभी क्षेत्रों के लिए 30 बार ऐसा नहीं करना चाहता हूं।

यहाँ है कि मैं क्या views.py में है:

manor_stats = Manors.objects.get(idx=id) 
return render_to_response('place.html', { 'place' : place, 'manor_stats' : manor_stats }, context_instance = RequestContext(request)) 

और फिर place.html में, मैं ??? बिट्स का संकेत के साथ, कुछ है कि (इस तरह लगभग काम करता है स्यूडोकोड करना चाहते हैं कि ,

{% if manor_stats %} 
<ul> 
{% for manor_stats.property??? in manor_stats %} 
    {% if manor_stats.property %} 
    <li>{{ manor_stats.property.field_name??? }} {{ manor_stats.property.value??? }}</li> 
    {% endif %} 
{% endfor % 
{% endif %} 

आशा है कि समझ में आता है ...

+2

सटीक अनुलिपि: http://stackoverflow.com/questions/2170228/django-iterate-over-model- उदाहरण-फ़ील्ड-नाम-और-मूल्य-इन-टेम्पलेट –

उत्तर

49

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

- models.py

class Manors(models.Model) 
    #field declarations 

    def get_fields(self): 
    return [(field.name, field.value_to_string(self)) for field in Manors._meta.fields] 

- manor_detail.html

{% for name, value in manor_stats.get_fields %} 
    {% if value %} 
    {{ name }} => {{ value }} 
    {% endif %} 
{% endfor %} 
+1

पूरी तरह से काम करता है - ठीक वही जो मैं खोज रहा था। धन्यवाद! – AP257

+1

क्या आप जानते हैं कि मैं किसी भी तरह के मूल्य के साथ field.verbose_name कैसे वापस कर सकता हूं? मुझे लगता है कि यह सही Django वाक्यविन्यास का सिर्फ एक प्रश्न है, लेकिन मैं परेशान हूं :( – AP257

+1

मैंने अपने मूल उत्तर में कुछ बदलाव किए हैं। फ़ील्ड से जुड़ी नाम विशेषता आपको जो चाहिए वह आपको देनी चाहिए। – buckley

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