Web2Py - 将 AJAX 响应呈现为 HTML table

Web2Py - rendering AJAX response as HTML table

我是 Web2Py 的新手,Python 堆栈。我有一个简单的要求来实现。我需要将一些数据从 UI 表单传递到控制器操作以进行处理。处理数据后,该操作 returns 响应返回到我需要在同一视图上呈现为 HTML table 的视图。为此,我正在使用 AJAX。

我能够将响应返回到视图,但不知道如何迭代该响应的元素以呈现为 HTML table。当我 运行 下面的代码时,它所做的只是用响应内容替换整个目标 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)

在这方面的任何帮助将不胜感激。

默认情况下,Ajax 函数期望接收 HTML,它将放置在传入 id 的元素内。因此,最简单的方法是让您的 process_form 函数 return table 的完整 HTML,因此 results_div div 的内容将被替换为新的 table。您可以使用 web2py HTML 帮助程序在 Python 中构建 HTML,或者您可以使用模板,就像任何其他控制器操作一样。例如:

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

或者,您可以使用 process_form 函数 return JSON 数据。在这种情况下,您可以将 ajax() 的第三个参数设为 Javascript 函数,然后 returned JSON 数据将传递给该函数。然后该函数可以用新数据填充现有 table。