0

私は自分のPCでdjangoを使ってテストを行っています.ifステートメントが真でr1変数が正しいコードを実行した場合。

def trovapernome(request, aggregatore, nome):
    url = urllib.urlopen("http://127.0.0.1:8000/media/%s.xml" % (aggregatore))
    richiesta = url.read()
    tree = ET.fromstring(richiesta)
    iterator = tree.getiterator("location")
    t = get_template('prova.xml')           
    for name in tree.iter('name'):
        if name.text.lower() == nome.lower():
            c = Context({'id' : name.text})
            r1 = HttpResponse(t.render(c), mimetype='application/xml')
            return r1

それ以外の場合、このコード:

def trovapernome(request, aggregatore, nome):
    url = urllib.urlopen("http://127.0.0.1:8000/media/%s.xml" % (aggregatore))
    richiesta = url.read()
    tree = ET.fromstring(richiesta)
    iterator = tree.getiterator("location")
    t = get_template('prova.xml')           
    for name in tree.iter('name'):
        if name.text.lower() == nome.lower():
            c = Context({'id' : name.text})
            r1 = HttpResponse(t.render(c), mimetype='application/xml')
        else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
    return r1

常にelse文を返す

4

2 に答える 2

1

ツリー内の複数の要素をループしています。最初のバージョンでは、最初の要素を処理するとすぐに戻ります。2 番目のバージョンでは、ツリー内のすべての要素を処理した後にのみ戻ります。

ループ内から戻るか、複数の一致で何をする必要があるかを判断します。

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
    else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
    return r1  # return the *first* match.
于 2012-10-29T18:16:54.783 に答える
0

returnが正しくインデントされていないため、最初のコード ブロックでループしていません。

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
        return r1
 # move return indentation to match here, i.e after the for loop completes

使用時に が 2 番目のブロックでどのようにreturn一致するかを確認しますelse

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
    else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
return r1
于 2012-10-29T18:18:13.753 に答える