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

标签 javascript jquery flask jinja2 getjson

我正在 jquery、getJSON 回调函数中工作,使用 Flask 作为我的 Web 框架。 我正在尝试为动态创建的 dom 元素设置链接目标。我想将其设置为 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

有人知道怎么做吗?

最佳答案

你混淆了 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 安全的。

关于javascript - 将 jinja2 url_for 设置为 getJSON 回调中的 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787159/

相关文章:

javascript - 从 javascript onclick 发出 ajax 请求

javascript - 选择选项后使用ajax过滤数据

javascript - jQuery 对象索引忽略 jQuery.filter()

javascript - 如何捕获 Backbone.save 的 xhr 对象

c# - 需要从 Javascript 调用代码隐藏方法而不在 asp.net 中使用 ajax

javascript - 为什么通常添加到 props 的组件会创建和使用回调?

javascript - 单击单选按钮显示日历以及 jquery 中的一个输入框

python - 在 greenlet 中访问 flask.g

python - Flask应用程序中的ElasticSearch RequestError:查询仅适用于两个模型之一(search_phase_execution_exception,创建查询失败)

python - 使用自签名证书运行 Flask 时出错 "No such file or directory"