Django中如何从视图向模板传递带参数的函数?
解决Django模板中调用带参数函数的问题
首先,Django模板语法不支持直接调用带参数的函数,这就是你报错的核心原因。另外你的days_until函数里还有个小错误:datetime.date.today是方法,需要加括号调用(写成datetime.date.today()),否则会拿方法本身和日期做减法,导致额外报错。
下面给你两种可行的解决办法:
方法一:在模型中添加实例方法
直接给Entry模型添加一个计算天数差的方法,模板里可通过实例直接调用:
# models.py from django.db import models import datetime class Entry(models.Model): date = models.DateField() # 其他字段... def days_until(self): td = datetime.date.today() temp = self.date - td return temp.days
模板中直接使用:
{% for entry in entries %} <div>{{ entry.days_until }}</div> {% endfor %}
方法二:自定义模板过滤器
创建自定义模板过滤器,通过管道符传递参数,适合跨场景复用:
- 在你的app目录下创建
templatetags文件夹(需包含空的__init__.py文件),新建custom_filters.py:
# yourapp/templatetags/custom_filters.py from django import template import datetime register = template.Library() @register.filter def days_until(date1): td = datetime.date.today() temp = date1 - td return temp.days
- 模板中先加载过滤器再使用:
{% load custom_filters %} {% for entry in entries %} <div>{{ entry.date|days_until }}</div> {% endfor %}
两种方法都能解决你的问题,模型方法更贴合实例专属计算,模板过滤器则更通用,可复用在不同模型的日期字段上。
内容的提问来源于stack exchange,提问作者Ben Miller
相关产品推荐
相关产品推荐

