【问题标题】:set jinja2 url_for as an href in getJSON callback在 getJSON 回调中将 jinja2 url_for 设置为 href
【发布时间】:2015-11-18 18:05:03
【问题描述】:

我在一个 jquery 中工作,getJSON 回调函数使用烧瓶作为我的 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

有人知道怎么做吗?

【问题讨论】:

    标签: javascript jquery flask jinja2 getjson


    【解决方案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 安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多