如何用字符串格式表示ListProperty(str)属性?
我有一个 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'
谢谢。
1 个回答
1
tag_list = [u'formal', u'flag', u'photo']
print ", ".join(tag_list)
>> formal, flag, photo
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。