从视图web2py将变量返回到脚本

时间:2012-07-26 19:23:00

标签: python html web2py

我有一个程序,它接受表单中的用户输入,并将用户输入分配给要通过程序使用的变量session.dataQuerysession.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 -->

1 个答案:

答案 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.