2012-09-24 55 views
0

This question started as the question at this link代碼吹過HTML模板,並返回到Python直接

我認爲這個問題是在模板unexpected.html(下文進一步)。 python代碼工作正常,但是當用戶提供number然後單擊提交按鈕時,python代碼會接受該值,並且無論if子句的哪個分支被採用,瀏覽器中的結果視圖都是unexpected.html以及Python代碼底部的嵌入式html。

爲什麼瀏覽器不停止,只有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 %} 

回答

1

無處你打出來的執行流程,我可以看到的,和嵌入式HTML將試驗後,因此沒有理由也不會執行。最快的解決辦法只是對return當你完成:

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

一般來說,你也有這個結構也有很多重複的邏輯:即應合併,然後將代碼可以進一步重構的是通過使這個結構更適合於具有適當的顯示邏輯的調度程序,而這些結構在不同的功能中更具可讀性。