.data函数和/或jsonrequest方法

时间:2017-05-21 02:58:34

标签: javascript jquery python django

以下是我的.ajax电话:

(function($){

  var bindEvents = function(node){
    $('.btn-fax', node).bind('click', function(e){
      e.preventDefault();
      var data = {};
      var fax_number = {{ contract.request.customer.convert_fax_number }};
      $.ajax({
        url : $(this).attr('href'),
        type: 'POST',
        data : data,
        success: function(data, textStatus, jqXHR) {
          if (data.success) {
              console.log('place 1');
              if (data.redirect_to) {
                console.log('place 2');
                window.location.href = data.redirect_to;
              }
              else if (data.reload) {
                console.log('place 3');
                window.location.reload();
              }
          }
          else {
            console.log('place 4');
            alert('Error! See console for details :(');
            console.error(textStatus, data);
          }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(fax_number);
            console.log(fax_number === '');
            if (!fax_number) {
                alert('Please, attach the fax number to your profile');
                return;
            }
            console.error(textStatus, errorThrown);
        }
      });
      return false;
    });
  };

  $.lw.on('init', function(args){
    bindEvents(args.node);
  });

})(typeof(django) == 'undefined' ? jQuery : django.jQuery);

这是我的django模板中使用按钮的部分:

<a href="{% url "contracts:fax" pk=object.contract.pk %}" class="btn pull-right {{ object.state|request_state_color }} darken-2 btn-fax" data-turbolinks="false">{%trans "Fax contract" %}</a>

我的代码不是由Django呈现的 - 它是在一个单独的JavaScript文件中,而不是在Django模板中。因此,我无法将变量定义为var fax_number = {{ contract.request.customer.convert_fax_number }}; Somme人告诉我,我可以使用jQuery .data()函数,或者我可以构建一个服务器端api,将传真号码作为JSON对象的一部分呈现(使用django jsonrequest方法)。任何人都有时间告诉我如何用我的代码做这件事。

我们告诉我,我可以使用id "contact"将数据传真属性添加到DIV代码,然后使用var fax = $("#contact").data("fax)。问题是我不知道如何使用Django。我最近开始使用javascript,这就是我需要你帮助的原因。

提前致谢!

P.S。如果我的问题不清楚,请告诉我?

1 个答案:

答案 0 :(得分:1)

如果您想将一些动态数据从django传递到您的javascript,则需要在模板中执行此操作。

有两个原因:

  1. Django不负责在生产中提供静态文件(javascript)。它不是基于每个请求编译的 - 这是模板的用途。
  2. 如果您动态地将新数据插入到JS中,那么用户的浏览器将无法对其进行缓存。如果您强制用户在每次访问页面时重新下载静态文件,这可能会影响您网站的性能。
  3. 正如你所说,你的模板看起来像是:

    <html>
      <head>
        ...
      </head>
      <body>
        ...
    
        <script type="text/javascript">
          /* Remember to wrap these in quotes if they need to be strings.
          You may also need to use the |safe filter for some data types
          to ensure django doesn't escape them (e.g. JSON) */
          var fax_number = {{ contract.request.customer.convert_fax_number }};
        </script>
    
        <!-- Import your JS file AFTER defining your variables -->
        <script src="src.js"></script>
    </html>