この例を使用して、ある種のゲストブックを実装しましたが、djangoフレームワークを使用しているだけです。htmlファイルでdb.key()関数を使用できないので、キーの文字列表現を使用してhtmlを渡す必要があると思いました。これにより、この問題が解決します。ドキュメントを確認したところ、
Keyオブジェクトをstr()に渡すことにより、キーを文字列に変換できます。
だから私は使用しました:
all_messages = db.GqlQuery( "SELECT * FROM Messages WHERE ANCESTOR IS :1 ORDER BY date DESC LIMIT 20" , image_key('name'))
for msg in all_messages:
msg.img_key_func = str(msg.key())
これはキーを文字列に変換する正しい方法ですか?
私のhtmlは次のようになります:
<ol name="list">
{% for message in all_messages %}
<li><div><img src="img?img_id={{ message.img_key_func }}"></img>{{ message.content }}</div></li>
{% endfor %}
</ol>
私がする必要があるのは、この例のようなものです。
self.response.out.write("<div><img src='img?img_id=%s'></img>" %
greeting.key())
ログの結果は次のとおりです。/img?img_id=Noneであるため、画像を表示できません。
これを行う簡単な方法はありますか?ありがとう!
編集1: 詳細
送信ボタンがトリガーされます
クラスSender(webapp.RequestHandler):
次のように:
def post(self):
accountName = self.request.get( "accountName" )
text = self.request.get( "text" )
message = Messages(parent=image_key('name'))
message.content = self.request.get( "text" )
avatar = self.request.get('img')
if avatar:
avatar = images.resize(self.request.get("img"), 32, 32)
image_full = self.request.get("img")
message.avatar = db.Blob(avatar)
message.imageblob = db.Blob(image_full)
message.put()
メッセージ(db.Model)は次のようになります。
class Messages(db.Model):
imageblob = db.BlobProperty()
avatar = db.BlobProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
def image_key(some_id='name'):
return db.Key.from_path('StartPage', 'name')
問題は、ダウンロードの直後にアバターを保存する必要がありますか、それともget_main_pageが要求されたときにサイズを変更する必要がありますか?このようにして、2つの画像を保存することを回避できます。1つはフルサイズで、もう1つはアバターです。それでもimage_keyを使用する必要がありますか?