0

この質問は、このリンクの質問として始まりました

問題はテンプレートにあると思いますunexpected.html(さらに下)。Python コードは正常に動作しますが、ユーザーが anumberを指定してから送信ボタンをクリックすると、Python コードは値を受け入れ、句のどのブランチifが取られても、ブラウザーでの結果のビューは両方unexpected.htmlあり、埋め込まれた htmlです。 Pythonコードの一番下。

unexpected.htmlテンプレートだけでブラウザーが停止しないのはなぜですか?

まず、以下は python コードです。

class MainPage(BaseHandler):

    def get(self):
    self.render_template('index.html', { })

    def post(self):
    number = self.request.get('number')
    hiddennumber = self.request.get('hiddennumber')
    for i in ["a"]:
        if int(number) < int(hiddennumber):
        reason='< was in that time slot already: '
        trans = Trans(key_name='reason')
        trans.reason=reason
        trans.name=number
        trans.put()
        template_values = {'trans':trans}
        path = os.path.join(TEMPLATE_DIR, 'unexpected.html')
        self.response.out.write(template.render(path, template_values))
        elif int(number) > int(hiddennumber):
        reason='> was in that time slot already: '
        trans = Trans(key_name='reason')
        trans.reason=reason
        trans.name=number
        trans.put()
        template_values = {'trans':trans}
        path = os.path.join(TEMPLATE_DIR, 'unexpected.html')
        self.response.out.write(template.render(path, template_values))
        else:
        pass
    self.response.out.write('''
        <html>
          <body>
            <form method="post">
              <p>Name: <input type="text" name="name" /></p>
              <p>Favorite foods:</p>
              <select name="favorite_foods" multiple size="4">
                <option value="apples">Apples</option>
                <option value="bananas">Bananas</option>
                <option value="carrots">Carrots</option>
                <option value="durians">Durians</option>
              </select>
              <p>Birth year: <input type="text" name="birth_year" /></p>
              <p><input type="submit" /></p>
            </form>
          </body>
        </html>
        ''')

class Unexpected(BaseHandler):

    def get(self):
        trans=Trans.get_by_key_name('reason')
        template_values = {'trans':trans}
        path = os.path.join(TEMPLATE_DIR, 'unexpected.html')
        self.response.out.write(template.render(path, template_values))

    def post(self):
        day=self.request.get('day')
        return webapp2.redirect("/")

app = webapp2.WSGIApplication([
        ('/', MainPage), 
        ('/unexpected', Unexpected)
        ],
        debug=True)

テンプレunexpected.htmlはその次。

{% extends "base.html" %}
{% block content %}


<form action="" method="post" >
<input type="hidden" name="day" value="{{ day }}"/>
This unexpected result occurred: <emph style="font-weight: bold">{{ trans.reason }}</emph>
<br /><br />
<div id="inputdata">
<label>Click the "Ok" button to go back to the previous page so you can edit your entry.
</label>
<input type="submit" value="submit" />
</div>
</form>
<button onclick="window.history.back()">Ok</button>

{% endblock content %}

最後に、index.html完全性を高めるために含めます。

{% extends "base.html" %}
{% block content %}
<center>
   </h1>
  </center>
<form action="" method="post">
<input type="hidden" name="hiddennumber"  value="10">
<label>Location/Venue name (no spaces and case counts)</label>
<input type="textbox" name="number" size="30" value=""></input><br/>
  <input type="submit" value=submit />
</form>


{% endblock content %}
4

1 に答える 1

1

私が見ることができる実行フローから抜け出す場所はどこにもありません。埋め込まれた HTML はテストの後であるため、実行されない理由はありません。最速の解決策は、return完了したときだけです:

self.response.out.write(template.render(path, template_values))
return
...

一般に、その構造にも多くの重複したロジックがあります。これを統合する必要があり、コードをさらにリファクタリングして読みやすくすることができます。その構造を、適切な表示ロジックを個別の関数に持つ単なるディスパッチャーに近づけることができます。

于 2012-09-24T13:19:45.163 に答える