我试图将一个数组传递到一个 javascript 文件(taskTableDip.js)中,以便稍后在 HTML 文件(supportDash.html)中创建一个表,但是由于某种原因,Flask 不断抛出
jinja2.exceptions.TemplateNotFound: {{ url_for('js', filename='taskTableDip.js') }}
。
奇怪的是,我注意到这一行似乎与代码中出现的行不同,我不确定这是否与 jinja 有关,以及我是否命名了错误的文件。
WebManager_main.py
from flask import Flask, render_template, url_for
#this is the library responsible for the hosting of the Web app
from werkzeug.middleware.proxy_fix import ProxyFix
import DataBaseHandler_Main as DBHM
app = Flask(__name__)
app.config["SECRET_KEY"] = "thisistotallysecret"
app.wsgi_app = ProxyFix(app.wsgi_app)
@app.route("/")
def login():
return render_template("login.html")
#this is the login site where the user will initiall be diurected to
@app.route("/supportdash")
def supportDash():
tasks = DBHM.fetch("1.0", None)
return render_template("supportDash.html", tableData = tasks)
#if __name__ == "WebManager_main":
# app.run(port=8080, debug = True)
模板/base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/main.css') }}" />
{% block head %}{% endblock %}
</head>
<body>
{% block main %}{% endblock %}
</body>
</html>
<!-- this is th basic template for the different html files -->
模板/supportDash.html
{% extends "base.html" %}
<!--{% include "{{ url_for('js', filename='taskTableDip.js') }}" %}-->
<!-- This is to fix the issue with passing values to the js file -->
{% block head %}
<title>Siteswift - Support Team DashBoard</title>
<!--script type = "text/javascript" src = ""></script-->
<script type="text/javascript" src="{{ url_for('static', filename='js/taskTableDip.js') }}"></script>
<script type="text/javascript">
var taskData = dataReturn({{tableData|tojson}})
</script>
{% endblock %}
{% block main %}
<table>
<h1>Support Team Portal</h1>
<tr>
<th>Task</th>
<th>User</th>
<th>Priority</th>
<th>Deadline</th>
<th colspan = 3>Actions</th>
</tr>
<tbody id="taskTable"></tbody>
</table>
{% endblock %}
静态/js/taskTableDip.js
var tableData = {}
function dataReturn(vars) {
return vars
}
function createTable() {
var table =
for (var i in tableData){
var row = `<tr>
<td>${tablData[i][0]}.Task</td>
<td>${tablData[i][1]}.User</td>
<td>${tablData[i][3]}.Priority</td>
<td>${tablData[i][4]}.Deadline</td>
<td><a href="{{ url_for('templates',filename='editTask.html')}}">Edit</a>.Actions</td>
<td>.Actions</td>
<td>.Actions</td>
</tr>`
}
}
文件结构:
我尝试将文件移出静态文件夹。除了关闭并重新运行代码,以及删除打包文件以重新安装 Flask 之外,希望它能够更新正在运行的文件(如果它卡在旧文件上)。 (我有点摸不着头脑,因为我不知道为什么错误代码看起来不同)
我非常感谢任何帮助!
您使用
<!-- ... -->
注释掉了错误消息中指定的行。然而,这并不能阻止 jinja 尝试渲染该行,因为 jinja 期望 {# ... #}
标记 comment。
include
命令仅用于集成外部模板,而不用于引用 JavaScript 文件。
此外,您可以在 JavaScript 文件中使用 jinja 表达式。
Jinja 与 JavaScipt 不同,它运行在服务器端。由于您在环境外部使用
url_for
命令,因此它不会被渲染并出现在 href 属性内。 Jinja 命令仅在模板文件和相应端点内有效。
url_for
命令中指定模板也是无效的。您只能使用现有端点的标识符来引用它们。