Flask render_template使用相对路径找不到Javascript文件

vbs*_*ql7 2 javascript python templates path flask

我正在使用Python和Flask构建一个简单的交互Web应用程序。使用Chrome在localhost:5000上进行测试。

我有一个模板和一个相关的javascript文件,位于:./templates/main.html ./templates/main_scripts.js

main.html模板包括如下脚本文件:

<script src="main_scripts.js"></script>
Run Code Online (Sandbox Code Playgroud)

当我使用此Python代码渲染模板时...

return render_template('main.html', session_id=session_id, title=sess.title)
Run Code Online (Sandbox Code Playgroud)

呈现了main.html页面,但我在Chrome控制台中收到此错误:

Failed to load resource: the server responded with a status of 404 (NOT FOUND)
Run Code Online (Sandbox Code Playgroud)

当发生错误时,使用Chrome控制台检查未找到的“ main_scripts.js”的位置,浏览器认为它正在尝试从我的虚拟环境中将其加载到:

./env/Scripts/main_scripts.js
Run Code Online (Sandbox Code Playgroud)

...而不是与模板位于同一目录。

我似乎无法强迫渲染的模板了解其脚本文件所在的位置。到目前为止,我已经尝试了src路径,例如“ ./main_scripts.js”,甚至“ /appdir/main_scripts.js”,其结果完全相同。

Esp*_*azi 7

您需要在与模板floder和js子flloder相同的级别上创建一个静态floder,然后将js放入该floder中,并在html中这样调用它,这是pythonic的方法:

<script src="{{ url_for('static', filename="js/main_scripts.js")}}"></script>
Run Code Online (Sandbox Code Playgroud)

如在flask的官方文档中有关应用程序结构的此处所述,您的项目结构应如下所示:

/yourapplication
    yourapplication.py
    /static
        /css
            style.css
        /js
            main_scripts.js
    /templates
        main.html
        ...
Run Code Online (Sandbox Code Playgroud)