0

私はPythonとDjangoを初めて使用しますが、それがほんの少しの愚かさである場合は、ご容赦ください。これはviews.pyの私のコードです。表示されているページが見つかりません404エラー。構文エラーはありますか?

ここでは、bのさまざまな値に基づいて、rendering_to_responseであるさまざまなデータをクエリしています。

views.py

@csrf_exempt
def active_user_table(request, b):
  if request.method != "GET":
    raise Http404
  print(b)//Just cheking the correct value coming to the function.This is getting printed in the shell.
  
  if (b==4):
         print("Hello World!")
         cursor = connection.cursor() 
         cursor.execute("SELECT core_user.id, name,mobile_number,COUNT(*) as count, created FROM core_user,core_useractivity WHERE core_user.id = core_useractivity.user_id GROUP BY user_id ORDER BY count DESC")    
         response_data = dictfetchall(cursor)  
         return render_to_response("siteadmin/active_user_table.tmpl",{'response_data':response_data})      
  elif (b==3):
          print("Hello World!")
          cursor = connection.cursor()
          cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND MONTH(CAST(created as date)) = MONTH(NOW()) AND YEAR(cast(created as date)) = YEAR(NOW()) GROUP BY user_id ORDER BY count DESC")
          response_data = dictfetchall(cursor)
          return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
  elif (b==2):
          cursor = connection.cursor()
          cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND DATEDIFF(NOW(), created) <= 7 GROUP BY user_id ORDER BY count DESC")
          response_data = dictfetchall(cursor)
          return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
  elif (b==1):
          cursor = connection.cursor()
          cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND DATE(created) = DATE(NOW())")
          response_data = dictfetchall(cursor)
          return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
  else:
          raise Http404

elseを削除する場合:一部HttpResponseが送信されないことを示しています。何が悪いのかわかりません。

4

4 に答える 4

2

引数 b は文字列になり、それが数値であると想定しています。数値を文字列に変換し、b と比較します。b == '1' など。

明らかにデバッグ スキルが不足しています。あなたが言ったように、あなたはこれに慣れていないので、pdb モジュールを調べてください。このモジュールは、コードにブレークポイントを設定します。

次のような多くの役立つ投稿があります - Python Debugger pdb の開始

于 2013-02-07T09:39:17.357 に答える
2

この場合の 'b' は、整数ではなく URL の一部であるため、文字列になることに注意してください。テストを次のように変更した場合。b=='1'、それらがすべて失敗した場合は Http404 を上げるようにしてください。そうすれば、期待どおりに動作するはずです。

于 2013-02-07T09:39:31.963 に答える
2

あなたの b はこれらの値のいずれでもないようです。これは、ビューに渡されないという事実 (これは urls.py で確認できます) であるか、おそらくそれが int(b) に入れられるべきである可能性があります。それが何であるかを理解していません。

# 元のかっこなしで "print b" と "print type(b)" を試してみて、何が返されたかを確認してください

于 2013-02-07T09:39:38.030 に答える
0

Burhan Khalid が最初に提案したように、URL マッパーから取得する値は文字列です。したがって、必要な変更は、比較文字列内のすべての整数を作成することだけでした。

于 2013-02-07T09:49:38.913 に答える