2023年9月8日金曜日

Django/PythonでのWEBアプリ開発を更に勉強ーその4

 この前のところで、大枠はcanvasjsによる表示が出来そうなところまで来て、最後に残った2つの問題について、検討(検索?)

1)djangoで使用している変数の値を表示される方法

  context[xxx]=abcとしてhtml に{{xxx}}とすれば表示が出来るとあったので、

  context= { 'year' : d.year(), 'month':d.month(),.....  (d=datetime.datetime.now())

としてみたら、TypeError: 'int' object is not callable と出てくるので、

  context={'date': d.date()......}としたら、正しく表示されるようになりました。

 なんで二重中括弧でくくるの?とか、型の取り扱い(数値、文字、リスト、辞書等)が今一よく分かっていませんが、 取り敢えずは、問題の一つは解決。

2)canvasjsでの空のデータを渡されたときの対応 (未解決)

  DBからのデータが無かった場合に、当該のobjectが生成されないために、以下のようなエラーが出る。 因みにlocal variable referenced before assignmentはググると結構出てくるので、嵌りやすい問題かも(C等と違い、variableを事前に宣言しないで使えちゃうので些かキモイ言語だと思っていますが、これは典型的なエラーですね)

  :         :          :           :         :

 File "/home/Users/ken/application_environment/mysite2/wxmonitor/views.py", line 240, in dailydata
    'MR2data': MR2tempdata,
UnboundLocalError: local variable 'MR2tempdata' referenced before assignment
[08/Sep/2023 11:35:45] "GET /dailydata/ HTTP/1.1" 500 66299

で、views.pyの中で、objectが出来ていなかった場合には空のリストを生成して渡すようにした。 これで、canvasjsも当該のデータの欠落を無視して表示されるようになった。 

<これって配列を使用する前に、空の配列を作ってから使用するようにすれば、条件のif文を一つ省略できるし、Argol系の使用する前に宣言と同じことなので、此方で行くことにしました。 これデコードが大分スッキリしました。


左は、改良後の表示のの状態(下が正常な状態で、上が欠落データがある状態)


 

 後学のために改良したviews.pyの一部を下に示しておきます

 

初めから空の辞書リストを宣言しておけば、シンプルに書けるので、そういうふうに書き直しました。

 

 

 

 


 

0 件のコメント:

PCをWindows11にアップグレード(ハードもRyzen9 9900x+4070TiSに)

remBG(背景を消すPysonのユーティリティ)を弄っていたら、記事に書かれているのと比べてやたらスピードが遅いので、購入履歴を調べてみると、3~4年経ってしまっている。  ここは、奮起して、Ryzen9 9900x+Asus Prime X870-P WIFI-CSM +As...