0

テキスト送信ボックス、「カテゴリ」ドロップダウン、3つの「スポーツ」ドロップダウンがあります(各スポーツドロップダウンには、分類されたスポーツのリストが含まれています。1つの入力ボタンで3つのフォームすべてを送信します(1つのスポーツドロップダウンのみを送信します)。このコードを使用すると、テキストとコンテンツフォームはカテゴリと同様に正常に送信されますが、スポーツセレクターは機能せず、常に最初のグループである「海」のpostelementがあります。私のifelifステートメントの何が問題になっていますか??

<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"
4

1 に答える 1

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"

この場合、空でない文字列はブールコンテキストで真の値を持ち、「or」演算子は真の値を持つ最初のオペランドを返すため、テストは「セーリング」にバインドされます。説明については、次のインタラクティブセッションを参照してください。

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")
于 2012-06-29T10:37:49.533 に答える