Skip to main content
 首页 » 编程设计

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

2025年05月04日20mfrbuaa

我有一个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 格式化列表元素,使其保持列表状态?谢谢。

更新

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

>>> 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'  

谢谢

请您参考如下方法:

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