2012-02-09 6 views
5

मेरे पास एक मॉडल है जिसे दिखाया गया है कि एक क्वेरी पर कार्य किया जाता है और उन तालिकाओं की एक सूची प्राप्त होती है जिन्हें तालिका के उचित कक्षों में रखना होता है। कोड का प्रासंगिक हिस्सा यहां दिया गया है।किसी तालिका टेम्पलेट में क्वेरीर को प्रस्तुत करने के लिए कैसे करें- django

class Location(models.Model): 
    x=models.IntegerField(null=True) 
    y=models.IntegerField(null=True) 
    z=models.CharField(max_length=5,null=True) 

    def __unicode__(self): 
     return self.z 

इस डाटाबेस मैं चाहता हूँ सभी वस्तुओं को पुनः प्राप्त और पंक्ति और स्तंभ एक्स द्वारा परिभाषित किया गया, इस बात का y के साथ एक 2d-तालिका में उन्हें जगह से object.If कुछ (एक्स, वाई) के लिए कोई वस्तु नहीं है तो उस विशेष स्लॉट को तालिका में खाली दिखाया जाना चाहिए। यही वह विचार है जिसे मैंने उन सिरों को पूरा करने के लिए लिखा था।

def gettable(request): 
    events=[] 
    for xdim in xrange(3): 
     xe=[] 
     for ydim in xrange(3): 
      object=[0] 
      object.append(Location.objects.filter(x=xdim,y=ydim)) 
      xe.append(object[-1]) 
      events.append(xe) 
    return render(request, 'scheduler/table.html', {'events':events}) 

यहाँ कोड

<table border="1"> 
    <th>Header 0</th> 
    <th>Header 1</th> 
    <th>Header 2</th> 
    {% for event in events %} 
    <tr> 
    {% for x in event %} <td>{{ x }}</td> 
    {% endfor %} 
    </tr> 
    {% endfor %} 
</table> 

मैं यहाँ कई मुद्दों से निपटने के लिए है के HTML हिस्सा है।

1. विचारों के लिए मेरा कोड बिल्कुल सुरुचिपूर्ण नहीं है (जो मुझे पता है क्योंकि django ऐसे कार्यों से निपटने के लिए बहुत सी चीजें प्रदान करता है) क्योंकि मैं विशेष रूप से उन लोगों को लेने के बजाय चर के लिए चर को परिभाषित कर रहा हूं (x, वाई) डेटाबेस वस्तुओं के मूल्य।

2. मुझे [<Location: 21>] प्रारूप में आउटपुट मिलता है लेकिन मैं इसे '21' के रूप में चाहता हूं।

3. मैं खाली कोशिकाओं को कैसे पेश करूं जहां दिए गए (x, y) के लिए कोई ऑब्जेक्ट मौजूद नहीं है।

4. कृपया किसी अन्य तरीके से सुझाव दें जो मेरा कोड सरल और सामान्य बना सकता है।

उत्तर

14

यदि आप अपना कोड सरल बनाना चाहते हैं, तो मैं आवेदन django-tables2 का उपयोग करने की अनुशंसा करना चाहता हूं। यह दृष्टिकोण तालिकाओं को उत्पन्न करने के बारे में आपके सभी मुद्दों को हल कर सकता है।

प्रलेखन sais के रूप में:

Django-tables2 टेबल HTML में डेटा के सेट मोड़ सरल बनाता है। यह अंकन और छंटाई के लिए देशी समर्थन है। यह HTML टेबल के लिए करता है जो django.forms HTML रूपों के लिए करता है। जैसे

इसकी विशेषताओं में शामिल:

  • किसी भी iterable एक डेटा-स्रोत हो सकता है, लेकिन Django क्वेरीसमूहों के लिए विशेष सहायता शामिल है।
  • बिल्टिन यूआई जावास्क्रिप्ट पर भरोसा नहीं करता है।
  • Django मॉडल के आधार पर स्वचालित तालिका उत्पादन के लिए समर्थन।
  • सबक्लासिंग के माध्यम से कस्टम कॉलम कार्यक्षमता का समर्थन करता है।
  • अंकन।
  • कॉलम आधारित टेबल सॉर्टिंग।
  • टेम्पलेट टैग HTML पर तुच्छ प्रतिपादन सक्षम करने के लिए।
  • Django 1.3 में उपयोग के लिए सामान्य दृश्य मिश्रण।

    import django_tables2 as tables 
    
    class SimpleTable(tables.Table): 
        class Meta: 
         model = Simple 
    

    यह तो एक दृश्य में इस्तेमाल किया जाएगा:

एक तालिका का निर्माण के रूप में सरल रूप में है

{% load django_tables2 %} 
{% render_table table %} 

:

def simple_list(request): 
    queryset = Simple.objects.all() 
    table = SimpleTable(queryset) 
    return render_to_response("simple_list.html", {"table": table}, 
           context_instance=RequestContext(request)) 

और अंत में टेम्पलेट में यह उदाहरण सबसे सरल मामलों में से एक दिखाता है, लेकिन डी jango-tables2 बहुत कुछ कर सकते हैं! अधिक जानकारी के लिए documentation पर देखें।

क्वेरीसेट के बजाय शब्दकोश का उपयोग करना भी संभव है।

1

प्रति बिंदु:

  1. IMO आप एक कस्टम फिल्टर या एक टैग बनाने और क्वेरीसमूह उपयोग करने के साथ प्राप्त कर सकते हैं।
  2. आपको अपनी वांछित वस्तु को वापस करने के लिए __unicode__ (या __string__) विधि को परिभाषित करने की आवश्यकता है।
  3. यदि मान खाली है या आइटम मौजूद नहीं है, तो प्रस्तुत परिणाम भी खाली होगा।

HTH

1

बिंदु 2 के लिए, आप प्रत्येक कोशिका एक वस्तु के बजाय एक सूची दे रहे हैं, {{x.0}} आप सही मूल्य देना चाहिए, लेकिन यह भी पता चलता है कि आप कर रहे हैं अपने दृश्य तर्क में गलत आ रहा है।

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

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