python - 使用 django 根据日期修改模板
问题描述
我想根据日期修改模板上的选项。
我怀疑的代码看起来像这样:
{% for campaign in filter.qs %}
{% if campaign.event_date__gte=datetime.today() %}
<code>
{% endif %} {% endfor %}
我相信我的问题是我试图像视图一样编写它 - 我只是不太确定如何在模板中编辑它而不是 views.py
解决方案
您可以通过将属性方法添加到模型类来执行此操作。
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 %}
推荐阅读
- javascript - 检测加载的图像是否是没有文件扩展名的 SVG
- python - 如何在python中将字节转换为字符串
- groovy - 从 url 中删除域的最佳方法
- django - django-rest-auth 重置密码电子邮件包含“example.com”域而不是 site_domain
- r - 如何使用其他列中的值作为键来减去特定列的值
- r - R合并重复
- sql - 如何使用 REF 类型的列而不是连接来链接 oracle 中的表
- r - 比较ggplot中的相关比例
- javascript - 直接在 Google Firestore 中获取 DocumentId
- c# - 如何将 StylecopAnalyzers 报告给 LogFileXML