以 javascript 变量作为参数的 Flaskr url_for 对 python 不起作用

Flaskr url_for with javascript variable as parameters is not working to python

我正在尝试将 Flask 与 url_for 一起使用。问题是,当我尝试使用 javascript 变量的值启动警报时,一切似乎都正常,但是当我尝试使用 url_for 启动警报时,不会打印变量的内容。我做错了什么?或者我的代码中缺少什么?

如何将 JavaScript 变量传递给 url_for 函数?

html代码:

<a class="dissable_user_btn" data-user_id="{{user.id}}" href="#" title="Change Status"><i class="fa fa-plug"></i>
</a>

JS代码:

<script type="text/javascript">
    $(document).ready(function(){ 
      $('.dissable_user_btn').click(function( event ) {
          var user_id = $(this).data("user_id")
          alert(user_id) //everything ok
          alert ('{{url_for('.dissable', _id=user_id)}}'); //dont print the valur of user_id
</script>

简短回答:你不能。 Flask 和 Jinja2 在服务器端呈现模板 (例如,Flask 正在翻译所有 {{ }} 发送 HTML 到网络浏览器之前的东西)。

对于这样的 URL,您需要在 javascript 中手动构建一个变量作为路径的一部分。如果这是一个 XHR 端点,我建议使用 GET/POST 将值传输到服务器,这是比以这种方式构建 URL 更好的最佳实践。 这样你就可以使用Jinja了:

$(document).ready(function(){
    var baseUrl = "{{ url_for('disable') }}";

    $('.dissable_user_btn').click(function(event) {
        var user_id = $(this).data("user_id");

        // first part = url to send data
        // second part = info to send as query string (url?user=user_id)
        // third parameter = function to handle response from server
        $.getJSON(baseUrl, {user: user_id}, function(response) {
            console.log(response);
        });
    });
});

我找到了另一个解决方案。当我需要使用 space.

传递变量时,我的问题就开始了

首先我创建了一个函数来删除尾随和前导 spaces

function strip(str) {
return str.replace(/^\s+|\s+$/g, '');}

之后,我使用函数编码了 URL

<script type="text/javascript">
 $(document).ready(function(){ 
  $('.dissable_user_btn').click(function( event ) {
      var user_id = $(this).data("user_id")
      alert(user_id) 
      user_id    =  strip(user_id).replace(" ","%20");
      alert ('{{url_for('.dissable', _id='user_id')}}.replace('user_id',user_id); 
</script>

它对我来说非常好!

这就是我解决问题的方式

<script>
   function strip(str) {
       return str.replace(/^\s+|\s+$/g, '');}

   $(document).ready(function() {
    $('#exportcountry').click(function() {
      var elemento = document.getElementById("countryexportbtn");
      var country  = strip(elemento.textContent).replace(" ","%20");
      $('#exportevent').load("{{ url_for('get_events',country = 'pais')  }}".replace('pais',country));

    });
   });
</script>