2015-07-23 2 views
0

Я новичок в Web2Py, стек Python. У меня есть простое требование для реализации. Мне нужно передать некоторые данные из формы пользовательского интерфейса в действие контроллера для обработки. После обработки данных это действие возвращает ответ на представление, которое мне нужно отобразить в виде таблицы HTML на одном представлении. Для этого я использую AJAX.Web2Py - рендеринг ответа AJAX в виде HTML-таблицы

Я могу получить ответ обратно в представление, но не знаю, как перебирать элементы этого ответа для визуализации в виде таблицы HTML. Когда я запускаю приведенный ниже код, все, что он делает, заменяет весь целевой DIV содержимым ответа.

Я знаю, что это довольно прямолинейно в Java, Grails, PHP и т. Д. Но я изо всех сил пытаюсь найти путь к этому в Web2Py.

У меня есть следующие фрагменты кода в моем коде: index.html:

<script> 
jQuery('#input_form').submit(function() { 
    ajax('{{=URL('process_form')}}', 
      ['input_var1','input_var2','input_var3','input_var4'], 'results_div'); 
    return false; 
}); 

<div id="results_div"> 
    <form> 
     <div class="table-responsive"> 
      <table id="records_table" class="table table-bordered"> 
       <tr> 
        <th>Col Head 1</th> 
        <th>Col Head 2</th> 
        <th>Col Head 3</th> 
        <th>Col Head 4</th> 
       </tr> 
       <tr> 
        <td>Col Content 11</td> 
        <td>Col Content 12</td> 
        <td>Col Content 13</td> 
        <td>Col Content 14</td> 
       </tr> 
       <tr> 
        <td>Col Content 21</td> 
        <td>Col Content 22</td> 
        <td>Col Content 23</td> 
        <td>Col Content 24</td> 
       </tr> 
      </table> 
     </div> 
    </form> 
</div> 

default.py

def process_form(): 
    results = request.vars 
    return DIV(results) 

Любая помощь в этой связи будет значительно оценили.

ответ

2

По умолчанию функция Ajax рассчитывает получить HTML-код, который будет размещен внутри элемента, чей идентификатор передан. Таким образом, самый простой способ состоит в том, чтобы функция process_form возвращала полный HTML-код таблицы, поэтому содержимое раздела results_div будет заменено новой таблицей. Вы можете создать HTML-код на Python с помощью HTML-помощников web2py или использовать шаблон, как и любое другое действие контроллера. Например:

def process_form(): 
    inputs = ['input1', 'input2', 'input3'] 
    html = DIV(TABLE(THEAD(TR(TH('Column 1'), TH('Column 2'), TH('Column 3')), 
          _class='test', _id=0), 
        TR([request.vars[input] for input in inputs]), 
        _id='records_table', _class='table table-bordered'), 
       _class='table-responsive') 
    return html 

В качестве альтернативы, вы можете иметь данные в формате JSON возврата в process_form функции. В этом случае вы можете сделать третий аргумент ajax() функцией Javascript, и возвращенные данные JSON будут переданы этой функции. Затем функция может заполнить существующую таблицу новыми данными.

+0

Спасибо Энтони. Я хотел бы воспользоваться первым подходом, который вы упомянули относительно: «Вы можете создавать HTML-код на Python с помощью HTML-помощников web2py или использовать шаблон, как и любое другое действие контроллера». Не могли бы вы поделиться примером кода построения HTML в Python с помощью HTML2-помощников Web2Py? – MSR

+0

ОК, обновил ответ на примере. – Anthony

+0

Удивительный! Большое спасибо Энтони за то, что он указал мне в правильном направлении. Теперь это имеет гораздо больший смысл. Однако я немного смущен тем, как вы создали TABLE. Я не могу понять семантику синтаксиса, которую вы использовали в 'html = DIV (TABLE (TR ([request.vars [input] для ввода входных данных]), _id = 'records_table', _class = 'table table- bordered '), _class =' ​​table-responsive ') '. Я пытался сравнить это с синтаксисом, показанным на: [link] (http://www.web2py.com/book/default/chapter/05#TABLE--TR--TD), т.е. 'TABLE (* [TR (* rows) для строк в таблице]) ' – MSR

Смежные вопросы