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。
我是 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。