2012-06-29 3 views
0

텍스트 제출 상자, "범주"드롭 다운, 세 개의 "스포츠"드롭 다운 (분류 된 스포츠 목록이 포함 된 각 스포츠 드롭 다운이 있습니다. 한 입력으로 세 가지 양식을 모두 제출하고 싶습니다. 버튼을 클릭하십시오 (선택된 스포츠 드롭 다운을 하나만 제출하십시오).이 코드를 사용하면 텍스트 및 내용 양식이 카테고리와 마찬가지로 훌륭하게 제출되지만 스포츠 선택기가 작동하지 않습니다. 항상 첫 번째 인 "바다"의 postelement가 있습니다 그룹. 무엇이 잘못 내의 elif 문이 여기에 HTML 드롭 다운 메뉴 제출의 파이썬 처리

<form method="post"> 
     <div class="row"> 
     <div class="span6"> 
      <h4>post something!</h4> 
       <label> 
       <input type="text" placeholder="Subject" name="subject" value="{{subject}}"> 
       </label> 

       <label> 
       <textarea style="height: 100px; width: 540px;" name="content">{{content}}</textarea> 
       </label> 
      {% if error %} 
       <div class="alert alert-error">Error: {{error}}</div> 
      {% endif %} 

      </div> 

     <div class="span2"> 
       <h4>categories</h4> 
       <select name="postcategory"> 
        <option>choose a category</option> 
        <option>general</option> 
        <option>discussion</option> 
        <option>adventures</option> 
        <option>review</option> 
        <option>badge applications</option> 
       </select> 
     </div> 

     <div class="span2 offset1"> 
       <h4>choose element and/or sport</h4> 
       <select name="postsport"> 
        <option value="general sea">--general sea--</option> 
        <option value="sailing">sailing</option> 
        <option value="diving">diving</option> 
        <option value="sailing">surfing</option> 
        <option value="kite boarding">kite boarding</option> 
        <option value="kayaking">kayaking</option> 
        <option value="general air">--general air--</option> 
        <option value="skydiving">skydiving</option> 
        <option value="paragliding">paragliding</option> 
        <option value="hang gliding">hang gliding</option> 
        <option value="base jumping">base jumping</option> 
        <option value="balloons">balloons</option> 
        <option value="general land">--general land--</option> 
        <option value="rock climbing">rock climbing</option> 
        <option value="hiking">hiking</option> 
        <option value="biking">biking</option> 
        <option value="skiing">skiing</option> 
        <option value="snowboarding">snowboarding</option> 
       </select> 
      </div> 

      </div> 
      <input class="btn" type="submit"> 
      </form> 

이 정보 postcategory = self.request.get ('postcategory') POS를 처리하는 내 파이썬있다 ?? 경우 tsport self.request.get = ('postsport')

 if postcategory == "choose a category": 
      postcategory = "general" 

     if postsport == "sailing" or "diving" or "surfing" or "kite boarding" or "kayaking" or "general sea": 
      postelement ="sea" 

     elif postsport == "skydiving" or "paragliding" or "hang gliding" or "base jumping" or "balloons" or "general air": 
      postelement ="air" 

     elif postsport == "rock climbing" or "hiking" or "biking" or "skiing" or "snowboarding" or "general land": 
      postelement ="land" 

     else: 
      postelement="general" 
      postsport = "general" 

답변

3

= "일반"이 postelement :

if postsport == "sailing" or "diving" or "surfing" or "kite boarding" or "kayaking" or "general sea": 
     postelement ="sea" 

읽 같이하십시오 사람이 경우

test = ("sailing" or "diving" or "surfing" or "kite boarding" or "kayaking" or "general sea") 
if postport == test: 
    postelement ="sea" 

, 비어 있지 않은 문자열은 부울 컨텍스트에서 true 값을 가지며 "or"연산자는 true 값을 갖는 첫 번째 피연산자를 반환하기 때문에 "sailing"에 바인딩됩니다. 그림은 다음과 같은 대화 형 세션은 cf :

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> "a" or "b" or "c" 
'a' 
>>> "" or "b" or "" 
'b' 
>>> 

을 원하는 테스트는 다음과 같습니다

sportelements = { 
    "sailing" : "sea", 
    "diving" : "sea", 
    # etc 
    } 
postelement = sportelements.get(postport, "general") 
+0

좋아 아, 감사 :

if postsport in ("sailing", "diving", "surfing", "kite boarding", "kayaking", "general sea"): postelement ="sea" 

더 좋은 해결책은 딕셔너리를 사용하는 것 더 많은 설명이 필요해. – clifgray