我有一个文本提交框,一个“类别”下拉列表,然后是三个“运动”下拉列表(每个运动下拉列表包含一个分类体育列表。我想通过一个输入按钮提交所有三个表单(仅提交一项运动)已经选中的下拉菜单。使用此代码,文本和内容表单提交正常,类别但运动选择器不起作用它总是有“海”的后置元素,这是第一组。我的错误是什么如果是elif语句??
<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>
这是我的python来处理这些信息 postcategory = self.request.get('postcategory') postsport = self.request.get('postsport') postelement =“general”
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"
答案 0 :(得分:3)
这:
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值的第一个操作数,因此test将绑定到“sailing”。请参阅以下交互式会话以获取说明:
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'
>>>
您想要的测试是:
if postsport in ("sailing", "diving", "surfing", "kite boarding", "kayaking", "general sea"):
postelement ="sea"
更好的解决方案是使用dict:
sportelements = {
"sailing" : "sea",
"diving" : "sea",
# etc
}
postelement = sportelements.get(postport, "general")