尝试访问 JavaScript 文件时出现“jinja2.exceptions.TemplateNotFound”错误

问题描述 投票:0回答:1

我试图将一个数组传递到一个 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 之外,希望它能够更新正在运行的文件(如果它卡在旧文件上)。 (我有点摸不着头脑,因为我不知道为什么错误代码看起来不同)

我非常感谢任何帮助!

javascript python html flask jinja2
1个回答
0
投票

您使用

<!-- ... -->
注释掉了错误消息中指定的行。然而,这并不能阻止 jinja 尝试渲染该行,因为 jinja 期望
{# ... #}
标记 comment

include
命令仅用于集成外部模板,而不用于引用 JavaScript 文件。

此外,您可以在 JavaScript 文件中使用 jinja 表达式。
Jinja 与 JavaScipt 不同,它运行在服务器端。由于您在环境外部使用

url_for
命令,因此它不会被渲染并出现在 href 属性内。 Jinja 命令仅在模板文件和相应端点内有效。

不幸的是,在

url_for
命令中指定模板也是无效的。您只能使用现有端点的标识符来引用它们。

© www.soinside.com 2019 - 2024. All rights reserved.