我在使用flask作为我的web框架的jquery,getJSON回调函数内部工作。 我正在尝试为动态创建的dom元素设置链接desination。我想将它设置为url_for的jinja2代码。所以,我想做这样的事情:
a.href ="{{ url_for('write_response', id=".concat(data.libArticles[i].id.toString(), ") }}");
我有最糟糕的时间这样做。首先,它无法识别" {{"和"}}"字符串,删除它们,打开引号和做其他奇怪的东西,因为这些字符。最后,通过这样做:
var url1 = "{url_for('write_response', id=".concat(data.libArticles[i].id.toString(),")}");
var url2 ="{".concat(url1, "}");
a.href = url2;
它最终接受了包含两个" {"的实例的字符串,因此它接受了" {{somethig}}"
这仍然无效,相反,当点击链接时,它会重定向到以下内容并失败:
http://localhost:5000/write_response/%7B%7Burl_for(' write_response',%20id = 3)%7D%7D
有谁知道怎么做?
答案 0 :(得分:1)
你混淆了你的python和javascript。你的第一次尝试失败,因为你试图在python中执行javascript。实际发生的是一切,包括" .concat被视为你的id的值。你的第二次尝试更加困惑。
值得记住的是,python代码在服务器上执行然后发送到浏览器,javascript在浏览器中被执行后执行。所以python / jinja代码可能无法知道javascript变量的值。
我认为您应该能够执行以下操作以使其发挥作用:
var url = "{{ url_for('write_response') }}";
var id = encodeURIComponent(data.libArticles[i].id.toString());
url += '?id='+id;
{{}}集合中的所有内容都被视为jinja代码,与文件中正在发生的任何内容分开。这应该在浏览器中转换为以下内容:
var url = "/write-response";
var id = encodeURIComponent(data.libArticles[i].id.toString());
url += '?id='+id;
哪些可以得到/ write-response?id = 12345 encodeURLComponent(..)调用只是确保值是url safe。