首页 > 解决方案 > 使用 django 根据日期修改模板

问题描述

我想根据日期修改模板上的选项。

我怀疑的代码看起来像这样:

{% for campaign in filter.qs %}
{% if campaign.event_date__gte=datetime.today() %}
<code> 
{% endif %} {% endfor %}

我相信我的问题是我试图像视图一样编写它 - 我只是不太确定如何在模板中编辑它而不是 views.py

标签: pythondjango

解决方案


您可以通过将属性方法添加到模型类来执行此操作。

import datetime 
today = datetime.datetime.today()
class ModelClass(models.Model):
    # fields 
    @property
    def is_future_date(self):
        return self.event_date >= today

{% for campaign in filter.qs %}
     {% if campaign.is_future_date %}
          # <code> 
     {% endif %}
{% endfor %}

但是如果你有多个不同date的 s 需要比较,或者你想知道它是过去还是现在的未来date,为每个模型编写一个属性方法并不是最好的。因此,我建议不要编写属性方法,而是编写一个标签过滤器,然后将其导入到您的模板中,这样您就可以date在模板中的任何位置比较 s 的任何实例。

这里有一个例子:

from django import template
register = template.Library()
import datetime

@register.filter
def is_future_date(date):
    return date >= datetime.datetime.today()

要在您的模板中使用它,请以这种方式调用它

{% for campaign in filter.qs %}
     {% if campaign.event_date|is_future_date %}
          <code> 
     {% endif %}
{% endfor %}

date模板中的另一个:

{% if another_instance.date|is_future_date %}
     # I am able to do it with whatever model
     # no need to create multiple property methods
{% endif %}

推荐阅读