[解決済み] Django テンプレートで辞書要素にアクセスする方法は?
2022-02-17 08:27:37
質問
各選択肢の得票数を表示したいのですが。以下のコードをテンプレートに記述しています。
{% for choice in choices %}
{{choice.choice}} - {{votes[choice.id]}} <br />
{% endfor %}
votes
は単なる辞書であるのに対し
choices
はモデルオブジェクトです。
このメッセージとともに例外を発生させます。
"Could not parse the remainder"
解決方法は?
Jeffのコメントと同じように、Choiceクラスのプロパティで、そのオブジェクトに関連する投票数を計算することを目指すべきだと思います。
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice=self).count()
votes = property(calculateVotes)
そして、テンプレートの中で、こうします。
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
テンプレートタグは、この解決策としては少しやりすぎだと思うのですが、ひどい解決策でもありません。Django におけるテンプレートの目標は、テンプレート内のコードからあなたを保護することであり、その逆もまた然りです。
ORMがプロパティを事前にキャッシュして、プロパティのサブセレクトを作成するだけなのか、投票数を計算するためにクエリを繰り返し/オンデマンドで実行するのか、私の頭では分からないので、上記の方法を試して、ORMがどんなSQLを生成するか見てみたいと思います。しかし、非道なクエリを生成するのであれば、自分で収集したデータでビューのプロパティに常に入力することができます。
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] Pythonで辞書を反復処理するときに、なぜ.items()を呼び出す必要があるのでしょうか?