2012-09-24 2 views
0

This question started as the question at this link코드는 HTML 템플릿을 통해 불어 직접

나는 문제가 템플릿 unexpected.html (더 아래)에 생각 파이썬로 돌아갑니다. 파이썬 코드는 잘 작동하지만 사용자가 number을 제공하고 제출 버튼을 클릭하면 파이썬 코드가 값을 받아들이므로 if 절의 분기가 수행 되더라도 브라우저의 결과는 이고unexpected.html입니다. 그리고 파이썬 코드의 하단에 삽입 된 HTML.

unexpected.html 템플릿으로 브라우저가 멈추지 않는 이유는 무엇입니까?

먼저 파이썬 코드입니다.

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은 테스트 후가 될 것입니다. 일반적으로

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

당신도 또한 그 구조의 중복 로직의 많은이 있습니다 : 통합되어야하며, 다음 코드가 될 더 리팩토링 될 수있다이 완료되면 가장 빠른 해결책은 return하는 것 별도의 기능으로 적절한 디스플레이 로직을 갖춘 디스패처만으로 구조를 구현하면 더 쉽게 읽을 수 있습니다.

관련 문제