在 Flask render_template 期间未使用相对路径找到 Javascript 文件 [重复]

Posted

技术标签:

【中文标题】在 Flask render_template 期间未使用相对路径找到 Javascript 文件 [重复]【英文标题】:Javascript file not found using relative path during Flask render_template [duplicate] 【发布时间】:2018-03-03 03:03:15 【问题描述】:

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

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

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

<script src="main_scripts.js"></script>

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

return render_template('main.html', session_id=session_id, title=sess.title)

main.html 页面已渲染,但我在 Chrome 控制台中收到此错误:

Failed to load resource: the server responded with a status of 404 (NOT FOUND)

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

./env/Scripts/main_scripts.js

...而不是来自与模板相同的目录。

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

【问题讨论】:

使用&lt;script src="url_for('static', filename='main_scripts.js')"&gt;&lt;/script&gt;,当你在子路由(即:`/user/info')时,相对路径会不同。 【参考方案1】:

您首先需要创建一个与templates 文件夹处于同一级别的static 文件夹。然后创建一个js 子文件夹并将js文件放入该文件夹中。现在您可以在 html 中调用它。 这是“pythonic”的方式:

<script src=" url_for('static', filename="js/main_scripts.js") "></script>

正如官方 Flask 文档中的 here 所述,您的项目结构应如下所示:

/yourapplication
    yourapplication.py
    /static
        /css
            style.css
        /js
            main_scripts.js
    /templates
        main.html
        ...

【讨论】:

感谢 Espoir 抽出时间回答并链接到更大的参考源。我为这个答案搜索了很长时间,但我想我使用了错误的术语。

以上是关于在 Flask render_template 期间未使用相对路径找到 Javascript 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Flask中的模板语言Jinja2及render_template

JS单击事件中的Flask中的render_template [重复]

在 Flask render_template 期间未使用相对路径找到 Javascript 文件 [重复]

Flask第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

flask中的session,render_template()第二和参数是字典

Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法