使用flask在html中调用外部Javascript函数,显示未定义的函数

时间:2019-04-03 00:44:33

标签: javascript html flask

我正在使用flask {{扩展“ base.html”%},然后插入{%block js_file%},然后调用.js文件中定义的函数,但收到未定义的引用错误。 我有一个 base.html ,其中包含所有页面中的所有基本元素。看起来像

<!DOCTYPE html>
<html>
    <head>
        <title>
            {% block title %}{% endblock %}
        </title>
        <!--css file code-->
        {% block cssfile %}{% endblock %}
        <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='header.css') }}">
    </head>
    <body> 
        ...
         {% block content %}{% endblock %}
         ...
         {% block js_files %}{% endblock %}
    </body>
    ....

然后在称为 mark.html 的特定页面中,我首先扩展并插入元素,并想在单独的functions.js文件中测试功能:

{% extends "base.html" %}
{% block cssfile %}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='mark.css') }}">
{% endblock %}

{% block title %}
    Mark
{% endblock %}

{% block js_files %}
    <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous">
    <script src="{{ url_for('static', filename='functions.js') }}"></script>
{% endblock %}

{% block content %}
    ....
    <script>warn();</script>
    ....
{% endblock content %}

functions.js 仅具有测试功能:

function warn(){
    alert('fired');
};

最后,在Chrome开发工具中,所想要的页面看起来像

<!DOCTYPE html>
<html>
    <head>
        <title>
            Mark
        </title>
        <!--css file code-->
        <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='mark.css') }}">
        <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='header.css') }}">
    </head>
    <body> 
        ...
         <script>warn();</script>
         ...
         <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous">
        </script>
        <script src="/static/functions.js"></script>
    </body>
    ....

该结构在我看来不错,但未定义的referenceerror尚未定义。我是Web div的新手,所以这个问题可能很愚蠢,但我非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为,这与加载顺序有关。因为我使用{% extends "base.html" %}并插入{%block js_file%},所以顺序令人困惑。我通过在base.html中具有适当的链接来处理此问题,因为这是所有内容的延伸来源,因此肯定会首先加载。