如何在django模板中从给定日期起特定天数后获取日期

Posted

技术标签:

【中文标题】如何在django模板中从给定日期起特定天数后获取日期【英文标题】:how to get date after some specific number of days from given date in django template 【发布时间】:2019-11-15 17:55:10 【问题描述】:

我是 django 的新手。我想在 html 模板文件中的特定天数或周数后获取日期。

我的模板文件代码:

% for factors in c.factor %
    % for factor_details in factors.factor_values %
         factor_details.id
         factor_details.factor_value
            # here this is given date order_detail.oderdate and this is number of days and weeks factor_details.factor_value.

    % endfor %
% endfor %

订购型号:

class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True,on_delete=models.CASCADE)
    order_no = models.CharField(max_length=120, blank=True) # AB31DE3
    shipping_address = models.ForeignKey(Addresses, related_name="shipping_address",null=True, blank=True,on_delete=models.CASCADE)
    billing_address = models.ForeignKey(Addresses, related_name="billing_address",null=True, blank=True,on_delete=models.CASCADE)
    cart = models.ForeignKey(Cart,on_delete=models.CASCADE)
    shipping_total = models.DecimalField(default=0.00, max_digits=65, decimal_places=2)
    totalamount = models.DecimalField(default=0.00, max_digits=65, decimal_places=2)
    stripe_id = models.CharField(max_length=120, blank=True)
    payment_status = models.CharField(max_length=120, blank=True)
    oderdate = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)

因子模型:

class ProductPriceFactor(models.Model):
    factor_value = models.CharField(max_length=255)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)

orderdate 和 factor_values 来自不同的模型,因此 orderdate 来自 order 模型,factor_value 来自 ProductPriceFactor 模型。请帮我。

【问题讨论】:

【参考方案1】:

我假设 factor_details 来自模型。然后您可以在模型中添加一个方法并在模板中呈现值。例如:

import datetime

class FactorDetail(models.Model):
   ...

   def date_after_some_days(self):
       return self.oderdate + datetime.timedelta(days=self.factor_value)

然后渲染模板中的值:

% for factor_details in factors.factor_values %
      factor_details.id 
      factor_details.factor_value 
      factor_details.date_after_some_days 
% endfor %

更新

上述解决方案在这里不起作用,因为您在 orderdate 和 factor_value 之间没有任何关系。相反,您可以创建一个template filter

# template filter tag

@register.filter(name='factor_date')
def factor_date(value, arg):

    return value + datetime.timedelta(days=int(arg))

并使用过滤器更新模板:

% for factor_details in factors.factor_values %
      factor_details.id 
      factor_details.factor_value 
      orderdetail.oderdate|factor_date:factor_details.factor_value 
% endfor %

【讨论】:

oderdate 和 factor_value 都来自不同的表。 @ruddra 可以分享模型吗? 查看我在我的问题中分享的模型 文档中提到:docs.djangoproject.com/en/2.2/howto/custom-template-tags/… 我们可以在 orderdetail.oderdate|factor_date:factor_details.factor_value 中传递多个参数吗?

以上是关于如何在django模板中从给定日期起特定天数后获取日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中从两天中获取日期名称

如何计算两个给定日期之间的天数

Swift 5 中从日期时间字符串到当前时间的天数时差

如何计算给定日期的剩余天数、小时数、分钟数和秒数?

MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和

如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外