0

この例を使用して、ある種のゲストブックを実装しましたが、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を使用する必要がありますか?

4

1 に答える 1

1

これ:

HTMLファイルでdb.key()関数を使用できません

真実ではない。テンプレートで引数を取らない関数またはメソッドを使用できます。したがって、thebjornがコメントで指摘したように、これは正常に機能します。

img_id="{{ message.key }}"

テンプレート言語はkey()メソッドを呼び出し、それを文字列に変換して出力するためです。

于 2012-06-25T08:10:26.560 に答える