0

我有一个程序,它在表单中接受用户输入并将用户输入分配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 -->
4

1 回答 1

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}}

您不需要将 onclick 事件添加到<a>标签,因为它们已经响应了点击。通过将建议添加到 URL,您可以根据需要设置会话变量,或request.vars.suggestion直接使用 get 变量 ( )。

那有意义吗?

仅供参考,我的初始代码与我刚才建议的基本相同。

这个:

{{=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. 
于 2012-07-26T21:36:21.437 回答