【问题标题】:Dynamic json data in a file is not getting changed in flask python webpage文件中的动态 json 数据在烧瓶 python 网页中没有改变
【发布时间】:2017-07-12 10:51:28
【问题描述】:

我有使用 Flask python 呈现的网页。在该页面中,我使用了一个 json 文件,其数据将根据搜索条件发生变化。我将 json 文件放在一个静态文件夹中。问题是,json 数据更改没有反映在浏览器中。

d3.json("{{ url_for( 'static', filename='data/Emails_export_sql.json') }}", function(graph) {
force
  .nodes(graph.nodes)
  .links(graph.links)   
  .start();
}

我尝试将 json 文件保存在“静态”文件夹以外的文件夹中。但它不会起作用。 json文件需要保存在哪里?

【问题讨论】:

  • 可以尝试在您的 html 标题中添加 <meta http-equiv="cache-control" content="no-cache" />

标签: python-3.x flask


【解决方案1】:

这是浏览器缓存问题。

这里有一些讨论:this SO post。本质上,这里的问题是您一遍又一遍地请求相同的 URL,因此默认行为是缓存响应。

推荐

使用 Flask 的 send_from_directory() 函数代替静态文件获取...例如:

from Flask import send_from_directory

@app.route('/get_file/')
def get_file():
    # cache_timeout is in seconds from the send_file options
    return send_from_directory("data", "xyz.json", cache_timeout=5)

这将设置响应标头以向浏览器指示缓存应在 5 秒后过期。

另一种短路浏览器缓存的方法(假设您总是想要 new 响应)是在 URL 的末尾附加时间戳:

// note... this timestamp approach fails on <IE9
var timestamp = Date.now(),
    base_url = "{{ url_for("get_file") }}",
    add_timestamp = base_url + "?t=" + timestamp;

d3.json(add_timestamp, function(graph) {
    force
      .nodes(graph.nodes)
      .links(graph.links)   
      .start();
}

在您的服务器端脚本中,您可以忽略时间戳参数,但它应该可靠地短路浏览器端的任何缓存问题。

【讨论】:

  • 这里的“url”是什么? --> d3.json(url, function(graph) {
  • 谢谢桑托罗。我尝试了你给 ant 的最后一个选项,它起作用了......
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多