我有一个程序,它接受表单中的用户输入,并将用户输入分配给要通过程序使用的变量session.dataQuery
。 session.dataQuery
被传递到下一个函数resultsDisplay()
,在那里它被处理并用于生成一组结果。在相应的视图resultsDisplay.html
中,将显示用户结果以及一些替代建议。
我希望替代建议是可点击的链接,它会调用resultsDisplay
函数并将session.dataQuery
更改为点击的值,并根据修订后的查询生成新结果。我不知道如何以这种方式更改变量。真的很喜欢这方面的一些帮助。希望这个问题有道理,如果你需要澄清,我会很乐意这样做。
def index():
#This function gets session.dataQuery
def resultsDisplay():
#This function uses the value assigned to session.dataQuery to
#generate a set of results
resultsDisplay.html:
<!-- Displays results obtained from resultsDisplay() -->
<ul>
<li>result_1</li>
<li>result_2</li>
...
</ul>
<!-- Alternative suggestions here. To be clickable links to reload this page. The
value be sent to resultsDisplay() to become the new session.dataQuery variable and
be reprocessed -->
答案 0 :(得分:1)
所以听起来点击链接会重新加载页面,就好像用户填写了不同的表单一样。
也许你应该让链接指向带有一些GET变量的resultsDisplay,包括一个告诉'resultsDisplay'新值dataQuery应该得到什么,另一个告诉它不要尝试处理表单,而只是覆盖dataQuery并渲染页面。
像
这样的东西<!-- Alternative suggestions -->
{{ =A(alt_sugg, _href=URL(vars={'suggest':True, 'dataquery':new_query_value}) ) }}
编辑:
那个代码究竟是什么?我的代码是:
{{for suggestion in suggestions:}}
<ul><li>
<a href="resultsDisplay.html" onclick="session.vars={{=suggestion}}>
{{=suggestion}}
</a></li></ul>
{{pass}}
所以在'onclick'中你有session.vars=
...会话是一个javascript变量吗?如果没有,你正在做的事情将无法奏效。当web2py呈现视图时,您不应该更改web2py的会话变量。它应该在控制器中完成(resultsDisplay)。
你可以这样做(请注意你输入的文字,你在{{=suggestion}}
之后遗漏了一个结束语:)
{{for suggestion in suggestions:}}
<ul><li>
<a href="resultsDisplay.html?suggest=True&suggestion={{=suggestion}}">
{{=suggestion}}
</a></li></ul>
{{pass}}
您不需要向<a>
标记添加onclick事件,因为它们已经响应了点击次数。通过向URL添加建议,您可以根据需要设置会话变量,或直接使用get变量(request.vars.suggestion
)。
这有意义吗?
fyi,我的初始代码与我刚刚建议的内容基本相同。
此:
{{=A(suggestion, _href=URL(vars=dict(suggest=True, suggestion=suggestion))) }}
生成相同的标记(基本上),如下所示:
<a href="resultsDisplay.html?suggest=True&suggestion={{=suggestion}}">
{{=suggestion}}
</a>
编辑:
所以我提供的代码只是视图。单击一个“建议”,resultsDisplay()将再次执行。这是你设置session.dataQuery:
的地方def resultsDisplay():
if request.vars.suggest == True:
session.dataQuery = request.vars.suggestion
else:
#This BRANCH of the function uses the value assigned to session.dataQuery to
#generate a set of results.