You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 %}

方法二:自定义模板过滤器

创建自定义模板过滤器,通过管道符传递参数,适合跨场景复用:

  1. 在你的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
  1. 模板中先加载过滤器再使用:
{% load custom_filters %}

{% for entry in entries %}
<div>{{ entry.date|days_until }}</div>
{% endfor %}

两种方法都能解决你的问题,模型方法更贴合实例专属计算,模板过滤器则更通用,可复用在不同模型的日期字段上。

内容的提问来源于stack exchange,提问作者Ben Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:18:28