0

次のモデル クラスがあります。

class Collection(db.Model):
  name = db.StringProperty()
  text_keys = db.ListProperty(db.Key)

class Text(db.Model):
  name = db.StringProperty()
  content = db.StringProperty()

そして、私は次のことをしようとしています:

class Collections(webapp.RequestHandler):
  def get(self):
    collections = model.Collection.all() # works fine

    for c in collections:
      c.number_of_texts = len(c.text_keys) # does not work

    template_values = {
      'collections': collections,
    }

私は確かにPythonの専門家ではありませんが、これでうまくいくのでしょうか?

アップデート:

機能しないということは、変数 number_of_texts がモデルオブジェクトに追加されていないことを意味します。

私の django-template では、次のコードはコレクション名を除いて何も生成しません。

{% for c in collections %}
<p>{{c.name}}, number of texts: {{c.number_of_texts}}</p>
{% endfor %}

解決:

django フォーマットを使用すると、よりエレガントな方法でこれを行うことができることを指摘してくれた RocketDonkey に感謝します。

{% for c in collections %}
<p>{{c.name}}, number of texts: {{c.text_keys|length}}</p>
{% endfor %}

または、名前と長さを含む別の辞書をテンプレートに渡すことによって、適切なフォーマットの解決策がない同様の問題が発生する必要があります。

4

1 に答える 1

1

number_of_textsしたがって、モデルのプロパティに書き込もうとしているようですCollection(存在しません:))。そのリスト要素のアイテム数を取得する必要があるだけの場合は、に関連付けられていない別の変数に格納する必要がありますc

for c in collections:
  number_of_texts = len(c.text_keys)

ドキュメントにリストの長さを追加するには (他の場所では必要ないと仮定します)、lengthテンプレートで関数を使用してみてください:

{% for c in collections %}
    <p>{{c.name}}, number of texts: {{c.text_keys|length}}</p>
{% endfor %}

これは、テンプレート エンジンによっては機能しない場合があります (私は 1 つしか使用していないため、専門家とは言えません) が、希望どおりになることを願っています。

于 2012-08-21T00:23:08.440 に答える