在 Django 模板中定义和插入年龄

mak*_*mov 2 django templates

我有一个模型、视图和模板:

模型

class Peoples(models.Model):
    l_name = models.CharField(max_length=50)
    f_name = models.CharField(max_length=50)
    m_name = models.CharField(max_length=50)
    tab_number = models.CharField(max_length=5)
    birthday = models.DateField(null=True, blank=True)
    post = models.CharField(max_length=250, blank=True)
    workplace = models.ForeignKey(Workplace, null=True, blank=True)
    skill = models.CharField(max_length=20, blank=True)
    dopuska = models.TextField(blank=True)
    srok_dopuskov = models.DateField(null=True, blank=True)
    photo = models.ImageField(upload_to='img',blank=True)
    class Meta:
        ordering = ('l_name',)
    def __unicode__(self):
        return self.l_name
    def age(self):
        import datetime
        return int((datetime.datetime.now() - self.birthday).days / 365.25  )
    age = property(age)
Run Code Online (Sandbox Code Playgroud)

看法

def view_persone(request, tab_number):
    return direct_to_template(request, 'person.html', {
       'persone': Peoples.objects.filter(tab_number=tab_number),
    })
Run Code Online (Sandbox Code Playgroud)

模板

{% for person in persone %}
    ???????: <b>{{ person.age }}</b>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是模板中应该是年龄的字段是空的。为什么?

Aja*_*dav 6

你需要做

 def age(self):
        import datetime
        return int((datetime.date.today() - self.birthday).days / 365.25  )
Run Code Online (Sandbox Code Playgroud)

因为您的生日是 DateField。