【问题标题】:Pass JavaScript variable to Flask url_for将 JavaScript 变量传递给 Flask url_for
【发布时间】:2016-07-08 16:25:51
【问题描述】:

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

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

【问题讨论】:

    标签: javascript python flask jinja2


    【解决方案1】:

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

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

    感觉不太对劲,我仍在寻找更好的解决方案。但它确实有效。

    【讨论】:

      【解决方案2】:

      您无法在 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_for 生成url,并将参数作为表单数据传递。

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

      【讨论】:

        猜你喜欢
        • 2016-10-18
        • 2022-07-17
        • 2018-03-05
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2016-09-12
        • 1970-01-01
        相关资源
        最近更新 更多