为了账号安全,请及时绑定邮箱和手机立即绑定

将JavaScript变量传递给Flask url_for

将JavaScript变量传递给Flask url_for

LEATH 2019-11-19 15:37:37
我有一个端点,该端点在url中带有一个值,并产生一些将插入div中的内容。我想url_for使用JavaScript变量来构建url 。但是,$variable1是作为字符串而不是的值传递的variable1。如何将JavaScript变量的值传递给url_for?function myFunction() {    var variable1 = "someString"    $('#demo').load(        "{{ url_for('addshare2', share = '$variable1') }}"    );}
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您无法在Jinja中评估JavaScript。您正在尝试在Jinja呈现时在服务器端生成url,但是您引用的变量仅在客户端浏览器上运行的JavaScript中可用。


在客户端上构建url是最简单的解决方法。(我不知道您的路线是什么样子,所以这里有个例子。)


$('#demo').load('/url/for/addshare2/' + variable1);

但是,这不是很有用,因为您不能使用url_for,因此必须对URL进行硬编码。这是一个很好的信号,表明您想要的是将参数传递到的AJAX端点,而不是包含值的端点。


@app.route('/addshare2', methods=['POST'])

def addshare2():

    share = request.json['share']

    ...

    return jsonify(result=...)

现在,您可以使用生成url url_for,并将参数作为表单数据传递。


$.post(

    '{{ url_for('addshare2') }}',

    {share: variable1},

    function (data) {

        // do something with data on successful response

    }

);


查看完整回答
反对 回复 2019-11-19
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

有时,我使用以下替代方法使用临时占位符字符串:


var variable1 = "someString";

$('#demo').load(

    "{{ url_for('addshare2', share='ADDSHARE2') }}".replace("ADDSHARE2", variable1)

);

感觉不太正确,我仍在寻找更好的解决方案。但这确实起作用。


查看完整回答
反对 回复 2019-11-19
  • 2 回答
  • 0 关注
  • 1736 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信