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

htmx结合Django Class Based Views实现倒计时功能异常问题排查

问题核心原因

倒计时数值不更新是因为时间差计算逻辑放在了类属性位置,类属性只会在Django项目启动、类首次加载时计算一次,后续所有请求都复用第一次的计算结果,不会实时更新。


调整方案

1. 修改views.py逻辑

将时间差计算移到get_context_data方法内,确保每次HTMX触发请求时,都会重新计算最新的时间差:

from datetime import datetime
from django.utils import timezone
from django.views.generic import TemplateView

class TimeDifferenceView(TemplateView):
    template_name = 'base.html'
    # 固定的目标倒计时截止时间可以保留为类属性
    target_time = datetime(2022, 12, 1, tzinfo=timezone.utc)
    
    def get_context_data(self,*args, **kwargs):
        context = super(TimeDifferenceView, self).get_context_data(*args, **kwargs)
        # 每次请求都重新计算当前时间和目标时间的差值
        delta = self.target_time - timezone.now()
        # 时间差为负时主动归零,避免出现负数
        if delta.total_seconds() < 0:
            context['days'] = 0
            context['hours'] = 0
            context['minutes'] = 0
            context['seconds'] = 0
        else:
            context['days'] = delta.days
            context['seconds'] = delta.seconds % 60
            context['minutes'] = (delta.seconds // 60) % 60
            context['hours'] = delta.seconds // 3600
        return context

2. 确认基础配置正常

  • 确保base.html模板头部已经引入HTMX依赖:
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
  • 确保urls.py中已经正确绑定路由:
from django.urls import path
from .views import TimeDifferenceView

urlpatterns = [
    # 其他路由
    path('time-difference/', TimeDifferenceView.as_view(), name='time_difference'),
]

你原有模板中的HTMX触发、替换逻辑无需修改,调整后即可正常每秒刷新倒计时数值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:01