1

エンティティ キーを含むタプルのリストをテンプレート システムに渡そうとしました。ただし、テンプレートに渡されるキーは、url エンコードされた文字列のように見えます。問題を解決するには?ありがとう。

見る:

items = []
for i in range(50):
  if prod[i]:
      items.append((prod[i].name, prod[i].key, someList[i]))
  else
      items.append((None, None, otherList[i]))

html テンプレート:

{% for item in items %}
   ...
   <img src="/image?entity_id={{item.1}}" />
   ...
{% endfor %}

イメージ リクエストのエンティティ キーは次のようになりました。

/GET /image?entity_id=%3Cbound%20method%20Product.key%20of%20%3Cmodel.Product%20object%20at%200xad63f2c%3E%3E HTTP/1.1" 404 -

4

2 に答える 2

0

NDB API によって提供される URL セーフ エンコード文字列を URL で使用することをお勧めします。これは生のキーに比べてより洗練されているためです。

したがって、次の方法で作成できます。

items.append((prod[i].name, prod[i].key.urlsafe(), someList[i]))

ハンドラーでは、エンコードされた urlsafe 文字列に基づいてキーを次のように再構築できます。

my_key = ndb.Key(urlsafe=your_encoded_string)

詳細については、NDB キー クラスを参照してください。

于 2012-12-19T16:49:29.540 に答える
0

ndb ではなく元の db ライブラリを使用しているためです。keyメソッドです - 値からわかるように、「バインドされたメソッド Product.key...」と表示されます。あなたはそれを呼び出す必要があります:

items.append((prod[i].name, prod[i].key(), someList[i]))
于 2012-12-19T15:29:25.547 に答える