我想构建(构建一个表很容易,我在模板中做)一个表并从中选择一行。我使用金字塔作为框架,我想我不得不让模板与模型对话,但我不知道如何。有人可以给我一个例子或指示我链接,我可以看到一个解释和一个例子(我无法找到一个)。这是我的表格HTML:
<table border="1">
<tr>
<th>Course Number</th>
<th>Course Name</th>
</tr>
<tr>
<td>111</td>
<td>What ever the name is</td>
</tr>
</table>
答案 0 :(得分:3)
做出一些假设,你描述的内容将通过ajax处理,这是一种基于javascript的技术,并且超出了Pyramid框架的范围,但很容易添加。下面是一个非常简单的HTML示例。
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.row').bind('click',function(){
var row = $(this);
options = {
url:"/some_pyramid_url_to_a_view/",
type:"get",
data:{'row_id':$(this).attr('id')},
success:function(event){$(row).text(event.data.method_result)},
error:function(){alert('error')},
dataType:'json'
}
$.ajax(options);
});
});
</script>
</head>
<body>
<table>
<tr id="${row.id}" class="row">
<td>Row</td>
</tr>
</body>
</html>
标签之间的代码是javascript,这里我使用jQuery库来创建对url'/ some_pyramid_url_to_a_view /'的ajax调用,该调用与视图函数'some_pyramid_view'相关联。我使用类'row'“$('。row')上的jQuery选择器将click事件绑定到表中的row元素.bind('click',...”然后事件由紧随其后的功能块“function(){...}”。我在options对象中设置调用并在数据“data:{'row_id'中传递行id:$(this).attr(' id')},“代码”$(this).attr('id')“正在访问模板中设置的id'...'最后我使用'$ .ajax将请求发送到视图选项)”
import json
@view_config(xhr=True)
def some_pyramid_view(request):
json_dict = dict()
session = DBSession()
if request.method == 'GET':
row_id = request.GET['row_id']
row = session.query(Row).get(row_id)
json_dict['method_result'] = row.some_method_call()
return Response(json.dumps(json_dict))
此处还有另一篇文章,JSON用于与Pyramid视图中的javascript进行通信。 JSON代表JavaScript Object Notation,是一种数据交换格式。我创建了一个Python字典,并使用'json'包将其转换为JSON,我将其发送回javascript中的'success'回调函数,并带有方法调用的结果。在成功回调函数中,我使用视图中方法调用的结果更新表行中的文本。 '$(行)的.text(event.data.method_result)'
这可能比您预期的要多,但是值得学习如何使用ajax为您的网站添加功能。