Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django模板中定义并插入年龄_Django_Templates - Fatal编程技术网

在django模板中定义并插入年龄

在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

我有一个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 = 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>