我正在尝试使用Webapp创建一个基本的报价共享应用程序。显然,能够为每个引用提供任意标记至关重要。
以下是我提出的相关代码: (主要来自精彩的介绍性书籍“Using Google App Engine”)中的示例聊天应用程序
class Quote(db.Model):
user = db.ReferenceProperty()
text = db.StringProperty()
tags = db.StringListProperty()
created = db.DateTimeProperty(auto_now=True)
和'观点':
class QuoteHandler(webapp.RequestHandler):
def get(self):
que = db.Query(Quote).order('-created');
chat_list = que.fetch(limit=10)
doRender(
self,
'quote.htm',
{ 'quote_list': quote_list })
def post(self):
self.session = Session()
if not 'userkey' in self.session:
doRender(self, 'quote.htm', {'error' : 'Must be logged in'} )
return
msg = self.request.get('message')
if msg == '':
doRender(self,'quote.htm',{'error' : 'Blank quote ignored'} )
return
tgs = self.request.get('tags') #really not sure of this
newq = Quote(user = self.session['userkey'], text=msg, tags= tgs)
newq.put();
self.get();
在quote.htm我有:
{% extends "_base.htm" %}
{% block bodycontent %}
<h1>Quotes</h1>
<p>
<form method="post" action="/quote">
Quote:<input type="text" name="message" size="60"/><br />
Tags: <input type="text" name="tags" size="30"/>
<input type="submit" value="Send"/>
</form>
</p>
{% ifnotequal error None %}
<p>
{{ error }}
</p>
{% endifnotequal %}
<br />
<h3> The latest quotes </h3>
{% for quote in quote_list %}
<p>
{{ quote.text }}<br />
({{quote.user.account}}) <br />
{{ quote.tags }}
{{ quote.created|date:"D d M Y" }}
</p>
{% endfor %}
{% endblock %}
然而,这个组合是错误的。我明白了:
BadValueError:属性标记必须是列表
无论我在标签中输入什么,(显然)我都是Python和Webapp的新手。我google了很多,但找不到任何实施标签的指南。因此,我非常感谢您帮助修复此错误,或者更确切地指出我处理标记的更优雅方式。
答案 0 :(得分:4)
在创建split()
之前,请尝试使用tgs
将Quote
转换为字词列表。标签应该用表单中的空格分隔,否则你可以在split
添加一个参数,如果你宁愿用别的东西把它们分开。
...
tgs = self.request.get('tags').split()
newq = Quote(user = self.session['userkey'], text=msg, tags= tgs)
...