在django模板中定义并插入年龄
我有一个mdel、视图和模板: 型号在django模板中定义并插入年龄,django,templates,Django,Templates,我有一个mdel、视图和模板: 型号 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 = mode
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)
查看
def view_persone(request, tab_number):
return direct_to_template(request, 'person.html', {
'persone': Peoples.objects.filter(tab_number=tab_number),
})
模板
{% for person in persone %}
Возраст: <b>{{ person.age }}</b>
{% endfor %}
{%用于persone%中的人员]
ззаааааа:{{person.age}
{%endfor%}
但模板中应为年龄的字段为空。为什么?我想您首先定义了一个方法
age
,然后在下一行中重新分配了名称age
。
试一试
旁白:您可以(也应该)在此处发布代码的相关部分,而不希望其他人在其他网站上查找您的代码。您需要这样做
def age(self):
import datetime
return int((datetime.date.today() - self.birthday).days / 365.25 )
因为你的生日是一个日期字段。它也会根据你的月份显示年龄 在models.py中
class Profile(models.Model):
date_of_birth = models.DateField()
def age(self):
import datetime
dob = self.date_of_birth
tod = datetime.date.today()
my_age = (tod.year - dob.year) - int((tod.month, tod.day) < (dob.month, dob.day))
return my_age
类配置文件(models.Model):
出生日期=models.DateField()
年龄(自我):
导入日期时间
dob=自出生日期
tod=datetime.date.today()
我的年龄=(tod.year-dob.year)-整数((tod.MOUNT,tod.day)<(dob.MOUNT,dob.day))
回到我的年龄
在profile.html中
<span>Age : </span> <i> {{ profile.age }} </i>
Age:{{profile.Age}
您不需要模型方法来计算年龄;您只需使用内置的模板过滤器timesince
[]:
Age:{{person.Age | timesince}
一个缺点是,如果您只想要以年为单位的年龄,那么目前似乎无法自定义生成的字符串。例如,它通常返回年份之外的月份,例如“37年,2个月”。它还可以返回奇怪的字符串,如“65岁12个月”(出生日期至少不是66年前)。此筛选器毕竟不是专门用于计算人的年龄的。上面的代码将给出以下错误
不支持的操作数类型-:“datetime.datetime”和“datetime.date”
>>type(datetime.date.today())返回,birtday也是一个日期字段。
<span>Age : </span> <i> {{ profile.age }} </i>