db.key()函数用于字符串表示并返回

时间:2012-06-24 16:52:01

标签: python django key

我使用this示例来实现某种类型的留言簿,只有我使用的是django框架。 我不能在html文件中使用db.key()函数,所以我想也许我应该用密钥的字符串表示传递html,并通过这个解决这个问题。我检查了docs,然后说了

  

通过将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 =无,因此,我无法显示图像。

有更简单的方法吗? 感谢名单!

编辑1:更多信息

提交按钮触发

  

class 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个图像 - 一个完整大小和另一个头像。 我还应该使用image_key吗?

1 个答案:

答案 0 :(得分:1)

此:

  

我不能在html文件中使用db.key()函数

不是真的。您可以使用不在模板中接受参数的任何函数或方法。因此,正如thebjorn在评论中指出的那样,这样可以正常工作:

img_id="{{ message.key }}"

因为模板语言会调用key()方法然后将其转换为字符串以进行输出。