如何在不重新加载Flask中的页面的情况下显示闪烁的消息?

时间:2016-12-03 16:08:11

标签: python flask

我正在使用Python中的Flask处理Web应用程序。

我的应用程序中有一个小函数,它在后台计算一些值,并通过闪烁的消息在网页上显示结果。

一切都在显示并正常工作,但需要重新加载页面才能获得闪烁的消息。

我想在不重新加载页面的情况下显示消息。

我听说我可以用js做到这一点,但我不熟悉js。

如果您有任何想法或建议,我将不胜感激。

我的代码可以更好地描绘我正在做的事情。

这是我的应用与主html文件之间的渲染器



{% macro render_field(field) %}
 <dt> {{ field.label }}
 <dd> {{ field(**kwargs)|safe }}
 {% if field.errors %}
        <ul class=errors>
        {% for error in field.errors %}
                <li>{{ error }}</li>
        {% endfor %}
        </ul>
 {% endif %}
 </dd>
{% endmacro %}
&#13;
&#13;
&#13;

这是我要显示闪烁消息的html文件:

&#13;
&#13;
<div class="container-fluid" style="min-height:100%">
  {% with messages = get_flashed_messages() %} 
    {% if messages %} 
      {% for message in messages %}
      <div class="alert alert-warning alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button> 
        {{message}}
      </div>
      {% endfor %} 
    {% endif %} 
  {% endwith %}
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

如果没有重新加载页面,这是不可能的。你必须在javascript中执行此操作。我建议使用display: nonedisplay: block进行CSS样式设置。这是一个例子。

1)Python代码,应该放在app.pyflask.py文件中。

app.route('/flash/<message>')
def flash(message):
  return render_template('flash.html', msg=message)

这将呈现名为flash.html的HTML页面。传入的URL还会有另一个参数<message>这是将闪烁的消息。像这样的网址localhost:80/flash/Hello%20World!会闪现消息“Hello World!”在你的屏幕上。

还有另一种传递消息的方法,这就是参数。代码是这样的。

app.route('/flash')
def flash():
  message = request.args.get("msg")
  return render_template("flash.html", ,msg=message)

这使用了flask的请求参数。所以像这样的网址localhost:80/flash?msg=Hello%20World!会给出一条闪烁的消息,上面写着“Hello World!”。如果要使用此方法,请确保在import语句中包含import语句from flask import request

2)Html代码,这是一个名为flash.html的单独文件,位于您的templates文件夹中。

<body>
  <h1 id="header">{{ message }}</h1>
  <script>
    var heading = $("#header");
    setInterval(function() {
      if (heading.style.display == "block") { heading.style.display = "none"; }
      else if (heading.style.display == "none") { heading.style.display = "block"; }
    }, 1000);
  </script>
</body>

setInterval中的1000是毫秒。因此标题将每2秒闪烁

答案 1 :(得分:1)

您可能需要考虑使用Toastr。我使用Flask的Flash功能遇到了同样的障碍,而Toastr则是纯粹的JS。您可以像代码中的控制台日志行一样使用它

compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'