【问题标题】:Flaskr url_for with javascript variable as parameters is not working to python带有javascript变量作为参数的Flaskr url_for不适用于python
【发布时间】:2017-03-19 20:22:46
【问题描述】:

我正在尝试使用带有 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>

【问题讨论】:

    标签: javascript python-3.x flask url-for


    【解决方案1】:

    简短的回答:你不能。 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);
            });
        });
    });
    

    【讨论】:

      【解决方案2】:

      我为此找到了另一种解决方案。当我需要传递一个带空格的变量时,我的问题就开始了。

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

      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>
      

      【讨论】:

        猜你喜欢
        • 2015-01-22
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-22
        • 2013-12-23
        • 2016-03-12
        相关资源
        最近更新 更多