将jinja2 url_for设置为getJSON回调中的href

时间:2015-11-18 18:05:03

标签: javascript jquery flask jinja2 getjson

我在使用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

有谁知道怎么做?

1 个答案:

答案 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。