【问题标题】:Django template date comparisonDjango模板日期比较
【发布时间】:2018-09-25 19:33:43
【问题描述】:

我正在尝试比较我的 html 模板中的日期。如果当前日期介于开始日期和结束日期之间,它将显示可用。但是,即使我的日期介于开始日期和结束日期之间,我当前的代码也只会显示 Not available

now 变量由 dateTime.now() 生成并传递给 html。日期格式为April 16, 2018, 1:44 p.m.,使用Django的DateTimeField

<tbody>
    {% for key in keys%}
    <tr>
        <th scope="row">{{key.name}}</th>
        <td>{{key.lock}}</td>
        <td>{{key.start_date}}</td>
        <td>{{key.end_date}}</td>
        {% if now >= key.start_date and now <= key.end_date %}
        <td>Available</td>
        {% else %}
        <td>Not Available</td>
        {% endif %}
        <td><button type="button" class="btn btn-primary btn-rounded btn-sm my-0">Unlock</button></td>
    </tr>
    {% endfor %}
</tbody>

views.py 中的代码

    keys = Key.objects.filter(user=request.user)
    dateTimeNow = datetime.now()
    args = {'keys': keys, 'now': dateTimeNow}
    return render(request, self.template_name, args)

【问题讨论】:

  • 使用自定义模板标签
  • 您可以将is_available 方法添加到您进行逻辑检查的关键模型中。这将更容易调试和优化
  • @RamkishoreM 所以每次我对所有数据进行数据库获取时,我都必须更新该字段?
  • 不需要字段。只是一个方法def is_available(self):。这使得它也可以重复使用。将这样的逻辑保留在模型中是个好主意

标签: python django jinja2


【解决方案1】:

将以下方法添加到您的 Key 模型中:

@property
def is_now(self):
    """
    Returns whether the key is active now
    :return:
    """
    return self.start_date < timezone.now() < self.end_date

现在在您的模板中:

 {% for key in keys%}
    {% if key.is_now %} 
        available
    {% endif %}
 {% endfor %}

【讨论】:

  • 如果它用于从数据库中检索一项,我会得到它。提取多行后,我可以知道如何将可用数据附加到我的结果中吗?我在 html 模板中使用 for 循环从每一行检索数据
  • @Eneres 你能提供代码来解释你的意思吗?
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 2011-04-17
  • 2013-03-18
  • 2021-12-31
  • 2013-04-06
  • 2013-05-19
  • 1970-01-01
相关资源
最近更新 更多