2013-11-28 64 views
0

我有一個對象的列表我試圖得到幾個月,我的問題不是每個對象都有每個月的日期。檢查項目是否在日期,否則打印默認

我想是這樣的:

{% regroup object_list|dictsort:"store.id" by store as store_list %} 
<ul> 
    {% for store in store_list %} 
    <li>{{ store.grouper }} 


     {% regroup store.list|dictsort:"product" by product as product_list %} 
     <ul> 
      {% for product in product_list %} 
       <li>{{ product.grouper }} 
        <ul> 
         {% for item in product.list|dictsort:"date" %} 
         <li>{{ item.price }} - {{ item.date|date }}</li> 
         {% endfor %} 
        </ul> 
       </li> 
      {% endfor %} 
     </ul> 
    </li> 
    {% endfor %} 
</ul> 

這給我:

  • 蘋果
    • 的iMac
      • 395 - 六月1,2013
      • 395 - jul。 1,2013
      • 395 - aug。 1,2013
      • 395 - sept。 1,2013
      • 395 - oct。 1,2013
      • 395 - nov。 1,2013
    • 的MacBook
      • 499 - 十一月1,2013

我想它顯示是這樣的:

  • 蘋果
    • 的iMac
      • MI SSING價值 - jan。 1,2013
      • MISSING VALUE - feb。 1,2013
      • MISSING VALUE - mar。 1,2013
      • MISSING VALUE - apr。 1,2013
      • MISSING VALUE - may。 1,2013
      • 395 - jun。 1,2013
      • 395 - jul。 1,2013
      • 395 - aug。 1,2013
      • 395 - sept。 1,2013
      • 395 - oct。 1,2013
      • 395 - nov。 1,2013
      • MISSING VALUE - des。 1,2013

任何knwo如果能夠做到這一點?

+0

你想要哪些條目沒有日期去? – Rohan

+0

對不起,也許還不清楚,但並不是每個對象每個月都有一個日期條目,有些在11月和Des中只有一個日期,其他的每個月都有一個日期。如果月份中沒有日期條目,我想顯示一個'-'字符。 –

+0

它仍然令人困惑,你能告訴我們你的'object_list'。 – Rohan

回答

1

您可以用模板過濾解決的問題:

  1. 創建過濾器文件(即<YOUR_APP>/templatetags/<YOUR_FILTERS>.py),並添加以下代碼:

    from django.template import Library 
    from django.utils.datetime_safe import datetime 
    
    register = Library() 
    
    @register.filter 
    def full_month_price_list(value): 
        month_list = [[datetime(2013, i, 1)] for i in xrange(1, 13)] 
        for item in value: 
         month_list[item.date.month - 1].append(item) 
        return month_list 
    

    這個過濾器需要的項目清單帶日期屬性並返回一個包含12個元素的列表:日期和項目

  2. 在您的模板代碼中加載過濾器({% load <YOUR_FILTERS> %}),並改變這一點:

    <ul> 
        {% for item in product.list|dictsort:"date" %} 
         <li>{{ item.price }} - {{ item.date|date }}</li> 
        {% endfor %} 
    </ul> 
    

    由(更新表作爲你的意見要求格式化):

    <table> 
        {% for item in product.list|full_month_price_list %} 
        <tr> 
         <td>{{ item.0|date:"b. j, Y" }}</td> 
         <td>{{ item.1.price|default:"MISSING VALUE" }}</td> 
        </tr> 
        {% endfor %} 
    </table> 
    

    請注意,您可以訪問產品item.1.dateitem.1.price的任何財產, item.1.pk

替換<YOUR_APP> b y您的django應用程序的名稱,<YOUR_FILTERS>的名稱,您希望用於您的過濾器文件。

請注意,在目錄<YOUR_APP>/templatetags/中需要一個名爲__init__.py的文件。

有關定製過濾器的更多信息,請致電django docs

+0

謝謝你的回答!我試過你的代碼,但是我得到了一個'列表分配索引超出範圍'的錯誤。任何想法可能是錯的? http://pastebin.com/qWvR5MaD –

+0

我更新了答案中的代碼,請再次重新測試 – juliocesar

+0

我在問題中看到您的更改,如果您想要''MISSING VALUE - 「'我的回答需要一些細微的更改 – juliocesar