将 JavaScript 变量传递给 Flask url_for

IT技术 javascript python flask jinja2
2021-01-16 17:08:08

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

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

有时我将以下解决方法与临时占位符字符串一起使用:

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

感觉不太对劲,我仍在寻找更好的解决方案。但它可以完成工作。

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

在客户端构建 url 是最直接的解决方法。(我不知道你的路线是什么样的,所以这是一个例子。)

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

但是,这不是很有用,因为您不能使用url_for,因此您必须对网址进行硬编码。这是一个好兆头,表明您想要的是一个向其传递参数的 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
    }
);