2012-01-17 13 views
0

私はdjangoで持っていた例外の問題を解決しようとしています:私は、次の呼び出しでURL http://someurl.com/?items=1,2,3を持つビューを持っています。私は?items=または?items=somthing_bsの場合に対処したいと思います。私はいつもエラーが発生します:割り当て前にローカル変数'apps'が参照されています。 try節にあるすべての例外とエラーをキャッチしてはいけませんか?私のコード:Django/Pythonの例外が機能しませんか?

def my_view(request): 
    if request.GET.get('mashpoint'): 
     try: 
      item_ids = request.GET.get('mashpoint') 
      item_ids = item_ids.split(',') 
      apps = mpApp.objects.filter(mpitem__pk__in=item_ids).distinct() 
      return render_to_response(template_name,context_instance=RequestContext(request,{'apps':apps,'item_ids':','.join(item_ids)})) 
     except: 
      return render_to_response(template_name,context_instance=RequestContext(request,{})) 
    return render_to_response(template_name,context_instance=RequestContext(request,{})) 
+0

あなたはインデントを修正するために、あなたの投稿を編集することはできますか? –

答えて

2

最後のrender_to_responseは、その上のブロックifの外側です。したがってitemsキーがGETにない場合、またはitemsキーが空の場合(/path/?items=)、appsは未定義です。

使用する方がよいでしょう:

if request.GET.has_key('items'): 
+0

はい、それです。私は最後のビットには何のポイントもなかったコードを改訂しました!ありがとう! –

0

問題はおそらく2番目のrender_to_responseステートメントにあります。値が割り当てられていない場合はappsが使用されています。

注:私は上記の文が上記のifのステートメントに含まれていないことを覚えています(Rob Wouters氏が指摘しているように、インデントが正しいとは思われません)。とにかく、エラーが報告されている行番号を確認することで確認できます。

0

tryブロック内の2番目のコールをrender_to_responseに移動します。ifのブロック構造が投稿したようなものであれば、現在のポイントはありません。それ以外の場合は、ランタイムエラーではないので、常にそのエラーが発生します。

関連する問題