2013-09-15 3 views
0

Я в настоящее время имеют следующий шаблон,Джанго Ajax и Looping над Response

{% extends "123/123-base.html" %} 
{% block main %} 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#button").click(function() { 
        var host = $("#hostinput").val(); 
        var record = $("#recordinput").val(); 
        $.ajax({ 
         url : "/lookup_ajax", 
         type : "POST", 
         dataType: "json", 
         data : { 
          hostinput : host, 
          recordinput : record, 
          csrfmiddlewaretoken: '{{ csrf_token }}' 
          }, 
         success : function(json) { 
           $('#mainsection').append("response" + json.response); 
          }, 
         error : function(xhr,errmsg,err) { 
           alert(xhr.status + ": " + xhr.responseText); 
          } 
        }); 
        return false; 
      }); 
     }); 
    </script> 

    <div id="mainsection"> 
    <div id="maininput" class="input-append"> 
     <form method="post" name="inputlookup" action="/lookup_ajax"> 
     {% csrf_token %} 
      <input class="span2" id="hostinput" name="hostinput" type="text"> 
      <select title="Record" id="recordinput" name="recordinput" > 
       <option value="A">A</option> 
       <option value="MX">MX</option> 
       <option value="Cname">Cname</option> 
      </select> 
      <button id="button" class="btn" type="submit">Lookup</button> 
     </form> 
    </div> 
    <div id="mainouput"> 
    </div> 
    </div> 
{% endblock %} 

Однако ответ я receieve от сервера я хочу петлю над использованием тегов шаблонов Django, как это,

{% extends "123/123-base.html" %} 
{% block main %} 
     {% if error %} 
      {{ error }} 
     {% else %} 
     <ul> 
      <table class="table table-style table-striped"> 
      <thead> 
      <tr> 
       <th>HOSTNAME</th> 
       <th>TTL</th> 
       <th>CLASS</th> 
       <th>TYPE</th> 
       <th>DETAILS</th> 
      </tr> 
      </thead> 
      {% for answer in response %} 
       <tr> 
       {% for field in answer %} 
        <td>{{ field }}</td> 
       {% endfor %} 
      </tr> 
      {% endfor %} 
      </table> 
     </ul> 
     {% endif %} 
{% endblock %} 

Любые идеи о том, как это должно быть сделано?

Спасибо,

+0

Я не уверен, что вы здесь задаете. Можете ли вы привести пример того, что вы получаете сейчас, и еще одно из того, что вы хотите получить в конечном итоге? – hellsgate

+0

Я в основном хочу использовать переменные, полученные из успешной части функции jQuery AJAX, и использовать их в тегах шаблона Django. – felix001

ответ

2

Он смотрит на меня, как вы возвращающая объект JSON для вызова AJAX. Если это правильно, то django не входит в него для отображения результата. Вам нужно будет изменить свою функцию success примерно на следующее:

success: function(json){ 
    // Table header 
    var table = $('<table>').addClass('table table-style table-striped'); 
    var thead = $('<thead>'); 
    var headrow = $('<tr>'); 
    var head1 = $('<th>').text('HOSTNAME'); 
    var head2 = $('<th>').text('TTL'); 
    var head3 = $('<th>').text('CLASS'); 
    var head4 = $('<th>').text('TYPE'); 
    var head5 = $('<th>').text('DETAILS'); 
    $(headrow).append(head1, head2, head3, head4, head5); 
    $(thead).append(headrow); 
    $(table).append(thead); 

    // table body 
    var tbody = $('<tbody>'); 
    num_answers = json.length 
    for (i = 0; i < num_answers; i++) { 
     var row = $('<tr>'); 
     var cell1 = $('<td>').text(json[i][0]); 
     var cell2 = $('<td>').text(json[i][1]); 
     var cell3 = $('<td>').text(json[i][2]); 
     var cell4 = $('<td>').text(json[i][3]); 
     var cell5 = $('<td>').text(json[i][4]); 
     $(row).append(cell1, cell2, cell3, cell4, cell5); 
     $(tbody).append(row); 
    } 
    $(table).append(row); 
    $('#mainsection').append(table); 
} 
+0

Да, я выпустил ошибку в моем вопросе после публикации, будучи тем, что шаблон будет только отображаться на стороне сервера. Спасибо за ваш ответ: o) – felix001

+0

К сожалению, я попробовал ваше предложение, и когда я нажимаю submit, я получаю только JSON, напечатанный на экране (??) Также нет закрывающих тегов? Спасибо, – felix001

+0

Я не уверен, что вы имеете в виду без закрывающих тегов. jQuery должен добавлять их при добавлении HTML. Можете ли вы опубликовать код из '/ lookup_ajax'. Я думаю, что происходит то, что JSON yu возвращается не в том формате, который я предполагал, когда я это написал, поэтому, если вы измените либо a) формат JSON, возвращаемый '/ lookup_ajax'; или b) jQuery, который создает новый выход, тогда вы должны получить то, что ищете. Можете ли вы опубликовать код из '/ lookup_ajax'. – hellsgate