2012-11-24 48 views
3

我搜索,但无法找到类似的问题,所以我很抱歉,如果这已被回答。现在让我们开始讨论话题。我有@property值的模型(其中3个)。他们所有的工作,一个只是返回空,我找不到问题。下面是模型的一部分:Django模板回声空属性

@property 
def case_number(self): 
    ''' 
    An formatted number officially designating this case. 
    ''' 
    s = u'%012d' % self.pk 
    return s[:3] + '-' + s[3:6] + '-' + s[6:9] + '-' + s[9:] 

@property 
def case_id(self): 
    ''' 
    An formatted string, consisting of the prefix NCDAC- and the case 
    number, officially designating this case. 
    ''' 
    return 'NCDAC-' + self.case_number 

@property 
def due_date(self): 
    margin = self.report_date + datetime.timedelta(days=30); 
    if timeuntil(margin) <= datetime.timedelta(days=1): 
     return 'today' 
    elif timeuntil(margin) < 0: 
     return 'overdue' 
    else: 
     return timeuntil(margin).split(', ')[0] 

这里是显示DB导致行规部分:

{% for case in sent_cases %} 
    <tr> 
     <td> 
      <a href="{% url "case-detail" case.pk %}"> 
       {{ case.case_number }} 
      </a> 
     </td> 
     <td>{{ case.get_agency_display }}</td> 
     <td>{{ case.report_date }}</td> 
     <td> 
      {% if case.status == "D" %} 
      <i class="icon-minus-sign"></i> No 
      {% else %} 
      <i class="icon-ok-sign"></i> {{ case.ts_submitted|date:"d M Y" }} 
      {% endif %} 
     </td> 
     <td>{{ case.due_date }}</td> 
    </tr> 
    {% endfor %} 

一切工作除了{{case.due_date}}。这只是空的块。任何想法为什么发生这种情况?

谢谢。

更新:好吧我只是想返回“东西”,它的工作。我有一个错误波纹管 - 由于某种原因,但它并没有上升异常。 self.report_date被定义为report_date = models.DateField(verbose_name='Report Date'),我试图得到多少天,直到report_date + 30天。

+2

作为测试,请尝试从视图内或从控制台而不是模板调用它,看看是否有抛出的异常。模板渲染器消除异常。 –

+0

请确保'timeuntil(margin).split(',')[0]'这个返回一些值? –

+0

@JoeHolloway 我试图从视图调用该道具 - 没有任何事(没有例外)。 @AamirAdnan 我以前试过用纯字符串'something'代替'timeuntil(margin).split(',')[0]',并且模板中仍然没有任何回应。 – NemanjaSRB

回答

1

下面的函数应该可以工作。我先移动了逾期支票,因为今天的支票也适用于这些日期,因为不到0天也会在1天以下。自从你写了你想要的日子以来,我也删除了timeuntil的用法。

def due_date(self): 
    margin = self.report_date + datetime.timedelta(days=30) 
    time_left = margin - datetime.datetime.now() 

    if time_left < datetime.timedelta(days=0, hours=0, minutes=0): 
     return 'overdue' 
    elif time_left <= datetime.timedelta(days=1): 
     return 'today' 
    else: 
     return '%s days' % time_left.days 
+0

谢谢!我正在搞乱它,但无法解决字符串和日期类型的问题。我想这是一种学习当Python和数据类型有问题时应该如何处理的方法:) 再次感谢。 – NemanjaSRB