2016-01-28 49 views
0

以下基本设置与python3.4,jinja2,flask_moment(0.5.1),Flask(0.10.1)集成。 我正在尝试简单理解工作的能力。 的例子是荒谬的,但我想浏览器显示:flask_moment当前时间刷新浏览器不更新

  • 首先,实时的实际时间(“当地的时间是......”),实时不断更新
  • 其次,时间已过(“那是......”)。

Jinja2的代码:

<p>The local time is {{ moment(current_time).format('LT', refresh=True) }}.</p> 
    <p>That was {{ moment(current_time).fromNow(refresh=True) }}</p> 

第二线刷新工作正常,在浏览器(“那是1/2/3分钟前”),表示正常工作的所有库,但第一行刷新不起作用。

方法moment(current_time).format('LT',refresh = True)我认为将刷新选项设置为“True”时会实时显示时间,但事实并非如此。

看着浏览器标记,所有的库都在那里,没有错误。请参阅下面的标记。 任何提示赞赏或者我误解的能力?

浏览器源:

<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

这样看来,根据文档,刷新=真只会每分钟更新。你有没有给它一分钟来验证它不爽快?

呈现的日期和时间可以通过传递 刷新=真实的参数来定期刷新任何上述函数。这是 对于相对格式很有用,因为它们随时间的更新而被更新为 。刷新间隔固定为一分钟。

http://blog.miguelgrinberg.com/post/flask-moment-flask-and-jinja2-integration-with-momentjs

+0

克里斯 - 是的,我已经给了它时间的黑桃。 jinja脚本中两行的刷新时间是相同的,第二个更新如预期,但不是第一个。谢谢。 – Seamus

2

这是瓶矩是如何工作的误解,可能是因为我不是很清楚的文档。

您在Jinja模板中放置的moment(current_time).format('LT', refresh=True)表达式在服务器而不是浏览器中运行。特别是,current_time变量具有一个固定的值,我假定您在Python代码中分配了该值。

运行此表达式的结果是在浏览器上运行的一些Javascript代码。当您通过refresh=True时,此Javascript代码每分钟运行一次。但是,当代码重复运行时,呈现的时间总是相同,因为在服务器上设置了current_time的值,并且未更新。自动刷新的使用仅对moment.js的“动态”渲染选项之一有意义,例如“X secs/mins ago”格式,因为这些格式会随着时间的推移而变化。

如果您想实现像时钟这样的更新时间,那么您可能需要一种解决方案,它可以在浏览器的Javascript中完成所有功能。

+0

Miguel,谢谢你的回复。是的,我现在已经了解,并且确实已经按照您的建议在JavaScript中对其进行了回溯编码。 – Seamus