javascript - 从不同项目运行时,Flask 会加载相同的 index.js 文件
问题描述
尝试在本地运行烧瓶应用程序时遇到以下问题:我使用了 URL_FOR 并直接尝试指定我的 index.js 文件的路径,但是当我尝试运行烧瓶时它总是加载不同的 index.js本地应用。
文件夹设置:
folder with source code of sample projects from a course i'm doing
-project1
--templates
---index.html
--static
---index.js
--application.py
-project2
--templates
---index.html
--static
---index.js
--application.py
-project3
--templates
---index.html
--static
---index.js
--application.py
-...
--> 假设我现在在终端中的 project2 中。我正在运行 export FLASK_APP=application.py
,然后python3 -m flask run
它按照以下方式在 localhost 5000 上为应用程序提供服务:
* Serving Flask-SocketIO app "application.py"
* Forcing debug mode off
直到现在看起来还可以。然而,有趣的是——> 当我导航到http://127.0.0.1:5000/时inspect
,它总是引用我的 /project1/static 文件夹中的 index.js。
我在 index.html 中所做的事情:
<!DOCTYPE html>
<html>
<head>
<script src="{{ url_for('static', filename='index.js') }}"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<title>Vote</title>
</head>
<body>
<ul id="votes">
</ul>
<hr>
<button data-vote="yes">Yes</button>
<button data-vote="no">No</button>
<button data-vote="maybe">Maybe</button>
</body>
</html>
我的 index.js 是什么样的:
document.addEventListener('DOMContentLoaded', () => {
// Connect to websocket
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
// When connected, configure buttons
socket.on('connect', () => {
// Each button should emit a "submit vote" event
document.querySelectorAll('button').forEach(button => {
button.onclick = () => {
const selection = button.dataset.vote;
socket.emit('submit vote', {'selection': selection});
};
});
});
// When a new vote is announced, add to the unordered list
socket.on('announce vote', data => {
const li = document.createElement('li');
li.innerHTML = `Vote recorded: ${data.selection}`;
document.querySelector('#votes').append(li);
});
});
我的 application.py 看起来像什么:
import os
import requests
from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
socketio = SocketIO(app)
@app.route("/")
def index():
return render_template("index.html")
@socketio.on("submit vote")
def vote(data):
selection = data["selection"]
emit("announce vote", {"selection": selection}, broadcast=True)
if __name__ == '__main__':
app.run()
我的答案
- 我自己找到了一个有趣的方法来修复它:如果我只是将它重命名为“main.js”并引用它,它就可以工作。
问题
- 知道这里可能有什么问题吗?我是否以错误的方式引用 index.js?
- 不可能在一个父文件夹中根本不能有多个 index.js 文件……对吗?
解决方案
IMO,浏览器将缓存静态文件。由于您所有的 JavaScript 文件都命名index.js
为/static/index.js
. 浏览器查看静态文件的路径,“哦,它是同一个文件!所以我只是从缓存中读取”。
因此,您唯一需要做的就是清除浏览器缓存(也许只需使用Ctrl+ F5)。
推荐阅读
- reactjs - 无法访问 api 调用返回的数据 http://dummy.restapiexample.com/api/v1/employee/3
- java - 使用模式匹配在 Java 中查找没有数字的字符串数据
- linq - Crystal Report - Linq select 语句在字段中查找空值
- c++ - 为什么这个程序的结果是3个“出生”?而4个死
- java - 在创建建议 bean 时,Spring aop 建议无法包装代理
- apache - 重写子目录以查询字符串参数
- python - 用于预测整数输出的自定义损失函数?
- android - React Native Expo 推送通知
- java - 从正在运行的 JVM 获取特定类的平均大小
- opengl - 如何检测需要但已禁用的间接 GLX?