【问题标题】:js scripts not loading in jinja2 templatejs脚本未在jinja2模板中加载
【发布时间】:2015-04-02 08:44:46
【问题描述】:

我有一种情况,将 url 字符串 "/CreditHistory/10216" 替换为 jinja2 变量 {{creditNumbers|safe}},会打乱 javascript 文件的加载。更具体地说,这是可行的;

{% block Scripter %}

<script type="text/javascript" src="./static/assets/js/crossfilter/crossfilter.js"></script>
<script type="text/javascript" src="./static/assets/js/d3/d3.js" charset="utf-8"></script>
<script type="text/javascript" src="./static/assets/js/dc.js/dc.js"></script>
<script type="text/javascript" src="./static/assets/js/queue/queue.js"></script>
<script src='./static/assets/js/graphsFordringer.js' type='text/javascript' charset="utf-8"></script>
<script type="text/javascript"> 

queue().defer(d3.json, "/CreditHistory/10216").await(makeGraphs);

</script>

{% endblock %} 

但是,这不是;

{% block Scripter %}

<script type="text/javascript" src="./static/assets/js/crossfilter/crossfilter.js"></script>
<script type="text/javascript" src="./static/assets/js/d3/d3.js" charset="utf-8"></script>
<script type="text/javascript" src="./static/assets/js/dc.js/dc.js"></script>
<script type="text/javascript" src="./static/assets/js/queue/queue.js"></script>
<script src='./static/assets/js/graphsFordringer.js' type='text/javascript' charset="utf-8"></script>
<script type="text/javascript"> 

queue().defer(d3.json, "{{creditNumbers|safe}}").await(makeGraphs);

</script>

{% endblock %} 

在网络浏览器中抛出的错误意味着没有加载任何 javascript 文件。其中之一是例如队列不是一个定义的函数。 同样明显的是"{{creditNumbers|safe}}" 变量确实加载到"/CreditHistory/10216"。因此,简而言之,变量加载似乎破坏了 javascript 加载。并不是说我在文档中找到了对类似问题的引用,所以这可能不是正在发生的事情。

编辑:

现在看来我误解了整个情况。看起来这是在 app.py 文件中声明 jinja2 模板变量的方式,这是根本原因。

失败的@app.routecode 是;

@app.route('/KundeFordringer/<int:KundeNr>')
def fordringer(KundeNr):

    jsonSti = "/CreditHistory/"+str(KundeNr)
    return render_template("fordringer.html", creditNumbers=jsonSti)

但是,如果我将代码更改为以下内容,它可以正常工作;

@app.route('/KundeFordringer')
def fordringer():

    return render_template("fordringer.html", creditNumbers="/CreditHistory/10216")

如前所述,从 Web 浏览器查看源代码,可以看到在使用第一个 @app.route 声明时加载了 "/CreditHistory/10216"。但显然,这种方式永远不会少。

任何帮助将不胜感激

【问题讨论】:

  • @doru,谢谢你的建议,但现在看来我误解了这个问题,并且问题源于app.py 声明,请参阅有问题的编辑。
  • 从 chrome 开发工具检查 &lt;script&gt; 时看到了什么?
  • @TimothéeJeannin 控制台抛出 16 个错误。其中14个是js文件的css的“加载资源失败”错误。最后两个错误是未捕获的引用错误,与两个函数有关,应该在未加载的 js 文件中声明。
  • 您确定要加载的资源可用吗?你能检查生成的url是否正确吗?尝试复制粘贴无法加载的资源的确切网址,并将其复制到浏览器多功能框中。
  • @TimothéeJeannin 我不知道该哭还是该笑,因为那是问题所在。 js 文件路径以./ 开头,而不仅仅是/。我肯定会通过检查答案是否已接受来感谢您。你无法相信我用了多少时间来解决这个问题......

标签: javascript python flask jinja2


【解决方案1】:

javascript 文件的加载与当前 url 相关。 基本上,如果您正在浏览

http://mywebsite.com/KundeFordringer/456

然后浏览器将尝试加载这些文件:

http://mywebsite.com/KundeFordringer/456/static/assets/js/crossfilter/crossfilter.js
http://mywebsite.com/KundeFordringer/456/static/assets/js/d3/d3.js
http://mywebsite.com/KundeFordringer/456/static/assets/js/dc.js/dc.js
http://mywebsite.com/KundeFordringer/456/static/assets/js/queue/queue.js

你想要的大概是

http://mywebsite.com/static/assets/js/crossfilter/crossfilter.js
http://mywebsite.com/static/assets/js/d3/d3.js
http://mywebsite.com/static/assets/js/dc.js/dc.js
http://mywebsite.com/static/assets/js/queue/queue.js

它们可能是您的脚本标签的问题:

<script type="text/javascript" src="./static/assets/js/dc.js/dc.js"></script>

需要改名

<script type="text/javascript" src="/static/assets/js/dc.js/dc.js"></script>

或者你的static_url_path有问题。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2017-10-20
    • 2019-11-05
    • 2013-10-08
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多