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へのリンクを指定し、dataQueryが取得する新しい値を'resultsDisplay'に通知するリンクと、フォームを処理しようとせずに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. 
于 2012-07-26T21:36:21.437 に答える