以下是我的Web2Py视图中的相关代码段:
{{for candidate in rows:}}
<div class="well col-sm-12">
<button type="button" name="up_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-up arrow-up fa-4x"></button>
<span>{{=candidate.votes}}</span>
<button type="button" name="down_button" onclick="ajax('{{=URL('default', 'arrow_button_callback')}}', ['name'], 'target')" class="fa fa-caret-down arrow-down fa-4x"></button>
{{=IMG(_src=URL('photos',candidate.path_to_photo), _alt="Photo of Candidate")}}
{{=candidate.name}}
<div id="target"></div>
</div>
{{pass}}
来自我的Web2Py控制器的相关片段:
def arrow_button_callback():
response.flash = str(request.post_vars.name)
return request.post_vars.name
那么为什么我会看到字符串&#34;无&#34;在我的目标div(和我的闪光灯)?
感谢您的帮助。我阅读了Web2Py书的第11章,我仍感到困惑。
我真的希望能够传递candidate.id(取决于按下哪一行按钮)和按钮方向到控制器变量。如果有更好的方法,请告诉我。
- 本杰明
答案 0 :(得分:0)
从web2py文档(重点添加):
ajax(url, [name1, name2, ...], target)
异步调用url(第一个参数),传递 字段输入 的值,其名称等于列表中的一个名称(第二个参数) ...
在您的代码中,您的第二个参数是['name']
。但是,没有名称为&#34; name&#34;的输入字段。在任何地方,所以没有&#34;名称&#34;变量被发布到web2py(因此,request.post_vars.name
是None
,这是当您尝试获取request.post_vars
中不存在的变量时返回的默认值。
在这种情况下,因为您没有在表单输入字段中放置任何数据,所以您可以忽略ajax()
的第二个参数。相反,通过URL本身传递相关数据:
{{url = URL('default', 'arrow_button_callback',
vars=dict(id=candidate.id, direction='up'))}}
<button type="button" name="up_button" onclick="ajax('{{=url}}', [], 'target')"
class="fa fa-caret-up arrow-up fa-4x"></button>
然后在arrow_button_callback
控制器中,您可以通过request.get_vars.id
(或request.vars.id
)访问候选ID。您可以通过request.vars.direction
访问箭头方向。为&#34; down&#34;创建一个新的URL。按钮,带direction='down'
。