如何用字符串格式表示ListProperty(str)属性?

时间:2011-01-29 15:44:49

标签: python google-app-engine string-formatting

我有ListProperty(str)

class Item(db.Model):
    tags = db.ListProperty(str)

有时我需要编辑已写入数据存储区的标签,因此我创建了一个编辑页面:

class EditItem(webapp.RequestHandler):
    def get(self):
        self.response.out.write("""<div>
        <form name="submit_form" action="/edititemhandler" method="post">

        url: <input type="text" name="url" size=50><br />
        <input type="submit" value="submit">
        </form></div>""")

处理表单:

class EditItemHandler(webapp.RequestHandler):
    def post(self):
            query = Item.all()
            query.filter("url =", self.request.get("url"))
            e = query.get()
            self.response.out.write("""
            <form name="submit_form" action="/edititemhandlerhandler" method="post">
            tags: <input type="text" name="tags" size=50 value="%s"> <br />
            [other values]
            ...
            <input type="submit" value="submit">
            </form> """ % (e.tags, .... ))

编辑标签后,我尝试将new_tags写回数据库:

class EditItemHandlerHandler(webapp.RequestHandler):
    def post(self):
        query = Item.all()
        query.filter("url =", self.request.get("url"))
        item = query.get()
        logging.info("TAGS %s" % self.request.get("tags"))
        new_tags = self.request.get("tags")
        item.tags = new_tags
        [other items]
        ...
        item.put()

但是这给了

BadValueError('Property %s must be a list' % self.name)
BadValueError: Property tags must be a list

logging.info显示self.request.get("tags")看起来像一个列表:

TAGS [u'speaking', u'glam']

如果我这样做

    item.tags = [new_tags]

new_tags变成我得到的列表

"[u'presidential', u'glam', u'family']" 

看起来像一个列表,但看起来像一个字符串。

那么,如何使用%s格式化list元素以使其保持列表?感谢。

更新

我认为我需要在更新前将标记列表转换为字符串,然后将其转换为列表:

>>> tag_list = [u'formal', u'flag', u'photo']
>>> tag_list_as_string = str(" ".join(tag_list))
>>> tag_list_as_string
'formal flag photo'
>>> #edit tags
>>> tag_list_as_string = 'formal flag photo newtag'
>>> new_tag_list = tag_list_as_string.split(" ")
>>> new_tag_list
['formal', 'flag', 'photo', 'newtag']
>>>

你知道我怎么能用逗号来tag_list_as_string,像这样,

'formal, flag, photo'

而不是像这样

'formal flag photo' 

由于

1 个答案:

答案 0 :(得分:1)

tag_list = [u'formal', u'flag', u'photo']
print ", ".join(tag_list)
>> formal, flag, photo