在 Flask 中分离 html 和 JavaScript [重复]

Posted

技术标签:

【中文标题】在 Flask 中分离 html 和 JavaScript [重复]【英文标题】:Separating html and JavaScript in Flask [duplicate] 【发布时间】:2016-07-10 02:09:06 【问题描述】:

嘿,我遇到了以下问题:

我正在构建一个小烧瓶应用程序,通常我只是坚持使用 bootstrap 和 jinja 模板来获得我想要的东西,但这次我需要更多定制的版本。为了掌握知识,我从一个简单的示例开始,该示例使用自定义 js 和烧瓶来获得基本权利。但是让我们详细介绍一下:

假设我在 my_app/ 中有一个名为 app.py 的简单烧瓶 Web 应用程序,如下所示

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(port=8080, debug=True)

而对应的index.html,位于my_app/templates,就是

<!DOCTYPE html>
<html>
<body>

<p>Clicking here will make me dissapear</p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js">            </script>
<script>
$(document).ready(function() 
    $("p").click(function(event)
        $(this).hide();
    );
);
</script>
</body>
</html>

然后我看到了预期的结果,即我可以点击段落使其消失。

但是:我想将 javascript 部分放入 static/js/ 下的 main.js 文件中。像这样:

$(document).ready(function() 
    $("p").click(function(event)
        $(this).hide();
    );
);

index.html 变成:

<!DOCTYPE html>
<html>
<body>

<p>Clicking here will make me dissapear</p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src='/js/main.js'></script>            
</body>
</html>

不幸的是,什么都不会发生。我也尝试过其他引用脚本文件的方法,但直到现在没有任何效果。我的印象是我错过了一些非常简单的东西。提前致谢!

【问题讨论】:

当您在浏览器中点击该 URL“/js/main.js”(直接在搜索栏中输入)时,该文件是否存在? 嗨 Josh,我可以在 127.0.0.1:8080/static/js/main.js 下看到它。因为据我所知,Flask 在静态文件夹中查找此类文件,我认为这需要省略。显然我错了。 【参考方案1】:

您需要在标记中调用url_for 函数,以便解析正确的网址,即

<script type=text/javascript src="
  url_for('static', filename='js/main.js') "></script>

请考虑完全遵循Quick Start 指南,因为它有助于解决您可能遇到的其他问题。

【讨论】:

以上是关于在 Flask 中分离 html 和 JavaScript [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从HTML中分离PHP, 在HTML种写PHP代码

在jQuery中分离和追加后CSS是不是会断开连接

ZF2 从递归 PHP 函数中分离 HTML

使用 webpack 在 vuejs 中分离模板

在 Nhibernate 中分离和附加代理

在 Go 中分离单元测试和集成测试