当前位置: 首页 > 面试题库 >

flask在.js文件中看不到更改

戚衡
2023-03-14
问题内容

我对.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.htmlFlask上,则Flask
选择文件上的新更改。但是在bar.htmlFlask中完全忽略了它们。

怎么了?

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


问题答案:

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

  • Windows:Ctrl + F5
  • Mac: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 / etc)设置默认值。

编辑4/1/2019 (与愚人节无关)

  • Mac / Safari的击键现在看来是:Cmd + Opt + R(通过评论,谢谢!)。
  • 有关非常优雅的“文件名技巧”,请参阅@MarredCheese的新答案,以强制浏览器忽略更新文件的缓存副本。


 类似资料:
  • 问题内容: 我正在使用Flask,一个适用于Python的网络框架。Flask使用Jinja渲染模板。我不知道Jinja Flask使用哪个版本,也不知道如何检索Jinja版本或Flask版本。我使用python版本2.7。 该模板在css / image目录中包含一个图像。直接在Firefox浏览器中以文件形式查看模板时,此图像可见。 但是在执行Flask时不是: HTML文件的内容: 模板运行

  • 问题内容: 我有一个日志文件,该文件是由另一个要监视更改的进程编写的。每次发生更改时,我都希望读入新数据以对其进行一些处理。 最好的方法是什么?我希望从PyWin32库中获得某种吸引。我找到了该功能,但不知道如何要求它观看特定文件。 问题答案: 你是否已经看过http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_chang

  • 下面是相关的AS3代码: 和我的php代码: 包括一次“connect.php”; $username=$_POST['username']$密码=$_POST['password']; 如果($_POST['systemCall']==“checkLogin”){ $sql=“从用户名为“$username”和密码为“$password”的用户中选择*; $query=mysql\u查询($sq

  • 问题内容: 有人尝试过基于静态文件夹代码片段的此片段flask配置吗? 代码: 就我而言,我抱怨这条线: 错误信息: 有谁能通过Flask中的config.py文件设置static_folder? 问题答案: 对该片段一无所知,但是 永远不是有效的Python(Python没有l值)。看起来好像有一个类似dict的界面,所以令人反感的行应该只是 在setter上方的getter定义中可能存在复制和

  • 我的日志代码: 我的烧瓶代码: warning.log

  • 给我的Laravel 5.1网站一个可编辑的镜头。我有一个列表的文本标题列为表行。我跟着留档。当我点击标题时,我可以看到文本字段的编辑表单弹出。我更改文本并提交。新文本显示,弹出窗口按预期消失。但是数据库没有更新。我确保将data-url设置为我需要的后期操作。确保为它添加路线。确保在我的控制器中有一个方法来处理请求、更新数据库和重定向(不确定重定向是否必要)。这是一个单行的片段,为了简单起见,我