Flask 在 .js 文件中看不到变化

2024-03-30

我对其中一项进行了更改.js我使用的文件,无论我做什么,flask 都会坚持从内存缓存中获取文件的最新版本,而不进行任何更改。

为了澄清一下,我有以下结构。一切都始于foo.html

return render_template foo.html

foo.html里面有一个表单,用一些数据调用flask,然后返回第二个模板bar.html:

return render_template bar.html

第二个模板调用了一些.js文件,放置在static文件夹,但当代码更改时它不会更新。

我提到上面的结构是因为如果.js文件被放置在foo.html代替bar.html然后烧瓶would获取文件上的新更改。但在bar.htmlFlask 完全忽略它们。

怎么了?

唯一有效的方法是单击浏览器上的“禁用缓存”并再次重新加载。


最终,这是一个令人沮丧的浏览器缓存问题,可以通过强制浏览器执行“硬刷新”来解决,这将是依赖于浏览器/操作系统的击键,但通常这是有效的:

  • Windows:Ctrl+F5
  • 苹果电脑:Cmd+Shift+R
  • Linux:Ctrl+Shift+R

还有其他文件名技巧可以用来避免这个问题(在OP的评论中提到)。这些在生产中尤其重要,因为您无法控制浏览器行为。

对于非静态 Flask 响应,您可以设置cache_control.max_age属性,它应该告诉浏览器响应何时过期(如果已缓存)。例如,如果您有一个返回 JSON 数据的 Flask XHR 端点,您可以这样做:

@app.route('/_get_ajax_data/')
def get_ajax_data():
    data = {"hello": "world"}
    response = jsonify(data)
    response.cache_control.max_age = 60 * 60 * 24  # 1 day (in seconds)
    return response

您通常还可以在生产 Web 服务器配置中为特定资源类型(例如 CSS/JS/HTML/JSON/等)设置默认值

编辑 2019 年 4 月 1 日(与愚人节无关)

  • Mac / Safari 按键现在似乎是:Cmd+Opt+R(通过评论,谢谢!)。
  • 请参阅@MarredCheese 的新答案,了解一个非常优雅的“文件名技巧”,以强制浏览器忽略更新文件的缓存副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask 在 .js 文件中看不到变化 的相关文章

随机推荐

  • pjax :HTML 链接,其工作方式类似于浏览器后退按钮

    我使用 pjax 进行网站导航 我需要创建一个 HTML 后退按钮 其工作方式与浏览器后退按钮完全相同 但这应该是一个简单的 HTML 链接 如何创建导航到上一页的 pjax 链接 我搜索过 所有主题似乎都与浏览器后退按钮有关 这不是我想要
  • Apache Web 服务器在 60 秒后超时

    我在 IBM Softlayer 中运行的 apache Web 服务器 php 在 60 秒后遇到超时 这些是我的设置 这些设置后httpd服务器重新启动 httpd conf TimeOut 300 Timeout 300 同时尝试两者
  • 颤振行和列

    我是一个颤振初学者 如何创建无边框的 4 2 表格列之类的元素 我尝试过 但没有得到我想要的对齐方式 像这样 https i stack imgur com i1a3f jpg 有人可以指导我如何解决这个问题吗 这是我的有状态小部件的构建方
  • 如何改进 clisp 错误消息?

    我已经接触过一些clisp 有点令人困惑的是它没有打印出错误所在的行号 或者 至少给出错误所在的一般提示 在某些情况下这一定是可能的 对吧 有什么方法可以获得更好的错误消息吗 正如我看到的大多数涉及 clisp 的问题一样 答案可能是 不要
  • 请对我的示例 Python 程序进行代码审查 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我仍在学习
  • 在 javascript 排序调用之前强制更新 element.innerHTML

    这种情况的最佳实践是什么 1 用户点击 对巨大的javascript数组进行排序 2 浏览器通过element innerHTML Sorting 显示 Sorting 3 浏览器对巨大的 javascript 数组进行排序 100 CPU
  • 使用流畅语法的嵌套 GroupBy LINQ

    我正在尝试使用流畅的 即 方法 语法编写嵌套的 GroupBy LINQ 表达式 这是我的课程和数据 class Person public String ZipCode Gender Name private static List
  • NotImplementedError:无法对未注册的加载器类型执行此操作

    我正在编写一个小脚本来生成 HTML 文件 为此 我正在使用jinja2 这是我的脚本 在jinja2文档 coding utf 8 from jinja2 import Environment PackageLoader env Envi
  • Nuget 包有什么意义?

    也许我在这里做错了什么或者表达了纯粹的无知 但我真的看不出 Nuget 包有什么好处 我最近决定安装一些 Nuget 包来替换我的应用程序中的静态 DLL 当我检查包创建的文件夹时 它们似乎包含许多不同版本的 DLL 所有这些都嵌套在一系列
  • 重命名没有列名的 pandas 数据框的列[重复]

    这个问题在这里已经有答案了 我试图在 dataframe from dict 操作之后命名新数据帧的列 只需使用 pandas dataframe from dict 函数 df pd DataFrame from dict my dict
  • 如何在python2.7中安装gtk?

    我正在使用 Debian 6 04 和 Python 2 7我编译了Python 2 7 configure make make install 在控制台中 gt python2 7 Python 2 7 3 default Jul 28
  • 如何排序 unsort: array(1).sort 转换 array(2) -> array(3).unsort (反转 array(1).sort

    如何对结果进行排序 操作和取消排序 假设我有一个浮点数组p1 0 15 0 3 0 25 0 12 其排序为 p2 sort p1 一个函数 操作p2作为输入 导致p3 p3 f p2 x y 对于某些功能f 我怎样才能取消排序p3以最聪明
  • Jmeter中的“延迟时间”与“连接时间”有什么区别?

    我是jmeter 3 1用户 我不清楚 延迟时间 与 连接时间 的区别 事实上 在jmeter官方文档中 是这样说的 新的连接时间指标 connectTime 表示建立连接的时间 默认情况下 它不会保存到 CSV 或 XML 要保存它 请添
  • 为什么当我导入正在打印的同一文件时,Python 会打印两次输出?

    我一直在玩Python 因为我是Python的初学者 我写了以下 Parent 课程 这是我从 Udacity 在线课程中阅读的 继承 py 文件 import inheritance Why this import statement c
  • 我怎样才能使其成为类的私有成员或方法,以便可以在静态库本身内部而不是在库外部访问它?

    我想为 Objective C 中的以下类准备小型静态库 A类 B类 C类 我想将这些类包含在静态库中 现在 A 类可以访问 B 类或 C 类方法的公共成员 现在当我将上述库集成到其他项目中时 我准备了D类 只能访问A类和B类 不是 C 类
  • Python 从网站上抓取表格?

    我想了解 treasury gov 网站上提供的所有国债收益率 https www treasury gov resource center data chart center interest rates Pages TextView a
  • 临时表上的聚集索引

    我正在尝试优化一个具有如下代码的过程 CREATE TABLE t1 c1 int c2 varchar 20 c3 varchar 50 CREATE CLUSTERED INDEX ix t1 ON t1 c3 ON PRIMARY 我
  • CMake 无法静态链接 SDL2

    我正在尝试使用 CMake 和 MSYS Makefile 构建一个简单的 SDL2 游戏 我想静态链接 SDL2 这样我就可以分发单个可执行文件 而不必包含 SDL2 dll 这是我的CMakeLists txt file project
  • 如何删除选定的 DataGridViewRow 并更新连接的数据库表?

    我有一个DataGridViewWindows 窗体应用程序上的控件 用 C 编写 我需要的是 当用户选择 DataGridViewRow 然后单击 删除 按钮时 应删除该行and接下来 需要使用表适配器更新数据库 这是我到目前为止所拥有的
  • Flask 在 .js 文件中看不到变化

    我对其中一项进行了更改 js我使用的文件 无论我做什么 flask 都会坚持从内存缓存中获取文件的最新版本 而不进行任何更改 为了澄清一下 我有以下结构 一切都始于foo html return render template foo ht