以下基本设置与python3.4,jinja2,flask_moment(0.5.1),Flask(0.10.1)集成。 我正在尝试简单理解工作原理的能力。 这个例子是荒谬的,但我想让浏览器显示:
Jinja2代码:
<p>The local time is {{ moment(current_time).format('LT', refresh=True) }}.</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>
第二行刷新在浏览器中正常工作(&#34;那是1/2/3分钟前&#34;),表明所有库都正常工作,但第一行刷新不起作用。
方法时刻(current_time).format(&#39; LT&#39;,刷新= True)我认为将刷新选项设置为&#34; True&#34;实时显示时间,但是它没有。
查看浏览器标记,所有库都在那里,没有错误。请参阅下面的标记。 任何暗示赞赏或者我误解了这种能力?
浏览器来源:
<div class="container">
<div class="page-header">
<h1>Hello, Flask!</h1>
</div>
</div>
<p>The local time is <span class="flask-moment" data-timestamp="2016-01-28T12:19:20Z" data-format="format('LT')" data-refresh="60000" style="display: none">2016-01-28T12:19:20Z</span>.</p>
<p>That was <span class="flask-moment" data-timestamp="2016-01-28T12:19:20Z" data-format="fromNow(0)" data-refresh="60000" style="display: none">2016-01-28T12:19:20Z</span></p>
<script src="/static/bootstrap/jquery.min.js?bootstrap=3.3.5.7"></script>
<script src="/static/bootstrap js/bootstrap.min.js?bootstrap=3.3.5.7"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment-with-locales.min.js"></script>
<script>
moment.locale("en");
function flask_moment_render(elem) {
$(elem).text(eval('moment("' + $(elem).data('timestamp') + '").' + $(elem).data('format') + ';'));
$(elem).removeClass('flask-moment').show();
}
function flask_moment_render_all() {
$('.flask-moment').each(function() {
flask_moment_render(this);
if ($(this).data('refresh')) {
(function(elem, interval) { setInterval(function() { flask_moment_render(elem) }, interval); })(this, $(this).data('refresh'));
}
})
}
$(document).ready(function() {
flask_moment_render_all();
});
答案 0 :(得分:2)
这是对Flask-Moment如何工作的误解,可能是由于我的文档不是很清晰。
您放入Jinja模板的moment(current_time).format('LT', refresh=True)
表达式在服务器而不是浏览器中运行。特别是,current_time
变量有一个固定值,我认为你在Python代码中指定了它。
运行此表达式的结果是在浏览器上运行的一些Javascript代码。当您传递refresh=True
时,此Javascript代码每分钟运行一次。但是,虽然代码确实重复运行,但渲染时间始终相同,因为current_time
的值已在服务器上设置且未更新。使用自动刷新只对其中一个动态&#34;有意义。渲染moment.js的选项,例如&#34; X秒/分钟前&#34;格式,因为它们随着时间的推移而变化。
如果你想实现类似时钟的东西,这会更新时间,那么你可能需要一个解决方案,在浏览器的Javascript中完成所有这些。
答案 1 :(得分:0)
所以看来根据文档,refresh = true只会每分钟更新一次。你有没有给它一分钟来验证它没有刷新?
通过传递可以定期刷新渲染的日期和时间 任何上述函数的refresh = True参数。这是 对于相对格式很有用,因为它们会随着时间的推移而更新 经过。刷新间隔固定为一分钟。
http://blog.miguelgrinberg.com/post/flask-moment-flask-and-jinja2-integration-with-momentjs