1

我正在用 Django 创建一个运动应用程序。我需要显示一个带有倒计时的匹配列表,该倒计时可以精确到这些匹配的时间。

一切正常,除了倒计时到比赛当天,而不是小时和分钟。例如,如果一场比赛在两天后的晚上 9 点开始,倒计时将在比赛当天的午夜停止。所以不会到晚上九点。

这是我的代码:

<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script type="text/javascript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="http://keith-wood.name/js/jquery.countdown.js">    </script>
</head>

<body>

<div style="float:left">
{% for match in matches %}
<div>  
    <p>{{ match }}</p>
    <p> {{match.real_start}} <p>
    <a href="{{ match.get_absolute_url_grille }}">Go</a>
    <div class="match_countdown" data-date="{{ match.real_start|date:'M j, Y'}}"></div>
</div>
{% endfor %}
</div>
</br></br>


<script>

$('.match_countdown').each(function() {
var self = $(this),
    date_string = self.attr('data-date'),
    date = new Date(date_string);
self.countdown({until: date});
});
</script>

</body>

“real_start”是我的 DateTime 我猜问题出在与 DateTimeField 不匹配的日期格式“M j,Y”上。但我没有找到如何解决它。

欢迎任何帮助。谢谢。

4

2 回答 2

4

我认为最好的解决方案是将 Python 代码中的 you DateTimeField 模型属性转换为时间戳,转换为毫秒。要么通过向模型添加一个方法来处理该逻辑,这是最简单的解决方案,然后在 javascript 中解析该字符串以获得毫秒数,要么编写一个 Django 过滤器,但这稍微复杂一些。

import time
import datetime

def datetime_to_milliseconds(some_datetime_object):
    timetuple = some_datetime_object.timetuple()
    timestamp = time.mktime(timetuple)
    return timestamp * 1000.0

## Example using this
now = datetime.datetime.now()
millisecond_timestamp_now = datetime_to_milliseconds(now)

(代码选择冗长,以便您更容易掌握逻辑)。

然后,您的 Javascript 应该类似于以下内容:

$('.match_countdown').each(function() {
    var self = $(this),
    date_string = self.attr('data-date'),
    date_milliseconds = Number(date_string);
    date = new Date(date_milliseconds);
    self.countdown({until: date});
});

基本上这些方面的东西应该可以解决问题,只需将其调整为一种方法即可。

未来的提示,尽量避免在模板中放置大量逻辑,这很容易出错并且不是一个真正的好习惯(除非它只是呈现逻辑,即使这样也有更好的解决方案)。

祝你好运。

于 2012-10-16T22:26:41.157 回答
2

从 Django 1.2 开始,你可以做

date = new Date({{ value|date:"c" }});

在此处检查格式文档。

于 2014-10-13T09:14:47.233 回答