一尘不染

将JavaScript变量传递给Flask url_for

javascript

我有一个端点,该端点在url中带有一个值,并产生一些将插入div的内容。我想url_for使用JavaScript变量来构建url
。但是,$variable1是作为字符串而不是的值传递的variable1。如何将JavaScript变量的值传递给url_for

function myFunction() {
    var variable1 = "someString"
    $('#demo').load(
        "{{ url_for('addshare2', share = '$variable1') }}"
    );
}

阅读 444

收藏
2020-05-01

共1个答案

一尘不染

您无法在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
    }
);
2020-05-01