将JavaScript变量传递给Flask url_for [英] Pass JavaScript variable to Flask url_for

查看:148
本文介绍了将JavaScript变量传递给Flask url_for的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 函数myFunction(){
var variable1 =someString
$('#demo')。load(
{{url_for('addshare2',share ='$ variable1')} }
);


解决方案

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



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

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

然而,这不是很有用,因为您不能使用 url_for ,所以你必须硬编码的网址。这是一个好兆头,你想要的是一个你传递参数的AJAX端点,而不是一个包含值的端点。

$ p $ @ app.route('/ addshare2',methods = ['POST'])
def addshare2():
share = request.json ['share']
...
return jsonify(result = ...)

现在你可以用 url_for ,并将这些参数作为表单数据传递。

  $。post(
{{url_for('addshare2')}'',
{share:variable1},
函数(数据){
//在响应成功时做数据
}
);


I have an endpoint that takes a value in the url and produces some content that will be inserted into a div. I want to build the url with url_for using a JavaScript variable. However, $variable1 is passed as a string, rather than the value of variable1. How can I pass the value of a JavaScript variable to url_for?

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

解决方案

You can't evaluate JavaScript in Jinja. You're trying to generate a url on the server side while Jinja is rendering, but you're referencing a variable that is only available in the JavaScript running on the client browser.

Building the url on the client side is the most straightforward fix. (I don't know what your route looks like, so here's an example.)

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

However, this isn't very useful because you can't use url_for, so you have to hard-code the urls. This is a good sign that what you want is an AJAX endpoint that you pass parameters to, rather than an endpoint that contains values.

@app.route('/addshare2', methods=['POST'])
def addshare2():
    share = request.json['share']
    ...
    return jsonify(result=...)

Now you can generate the url with url_for, and pass the parameters as form data.

$.post(
    '{{ url_for('addshare2') }}',
    {share: variable1},
    function (data) {
        // do something with data on successful response
    }
);

这篇关于将JavaScript变量传递给Flask url_for的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆