flask_stment当前时间刷新浏览器未更新

时间:2016-01-28 13:23:42

标签: python-3.x flask jinja2 momentjs

以下基本设置与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();
});

2 个答案:

答案 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