$ SCRIPT_ROOT = {{request.script_root | tojson | safe}}无效

时间:2015-06-24 13:30:38

标签: jquery flask

我跟随此example使用:

var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};

我已纠正:

var $SCRIPT_ROOT = '{{ request.script_root|tojson|safe }}'; 

所以它没有给出错误:

  

意外的令牌{

但是,我收到了另一个错误:

  

GET   http://localhost/templates/%7B%7B%20request.script_root%7Ctojson%7Csafe%20%7D%7D/_prtpe?i=6   403(禁止)

出现此错误的原因和/或如何解决此问题?

编辑:这是Python代码的重要部分:

@app.route('/_prtpe')
def prtpe():
    i = request.args.get('i', 0, type=int)
    for position, item in enumerate(price):
        if item > i:
            return jsonify(result=percentage[position-1])

@app.route('/')
def index():
    return render_template('study3.html')

修改2 :我将此代码从script.js移至study.html

<script type="text/javascript">
          var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};             
</script>

但现在我收到了JavaScript代码的错误,因为我稍后会使用变量$SCRIPT_ROOT

  

未捕获的ReferenceError:$ SCRIPT_ROOT未定义

2 个答案:

答案 0 :(得分:1)

根据错误中的路径,您尝试直接获取模板。相反,您需要渲染模板,因为它包含Jinja语法。您已经制作了一个可以呈现模板的视图,但您还没有使用它。转到由/视图处理的路径index,然后返回呈现的模板。

您获得的具体错误是因为JavaScript并不了解Jinja语法。您不需要将tojson的结果包装在引号中。

如果从html模板中分离出带有Jinja语法的js文件,则还需要使用Jinja进行渲染。任何具有Jinja语法的东西都不是静态的,它不能直接链接。另一种方式是,您可以链接到url_for的任何文件都需要一条路线来呈现或提供它。

答案 1 :(得分:0)

我第一次尝试教程时遇到了同样的错误。我的问题是我在浏览器中打开index.html文件而不是运行python程序(实际上是渲染模板)

尝试使用github repo中的文件(https://github.com/pallets/flask/tree/master/examples/jqueryexample) 并通过单击执行python程序(&#39; jqueryexample.py&#39;)。