Как реализовать теги в веб-приложении? - PullRequest
3 голосов
/ 08 декабря 2011

Я пытаюсь создать базовое приложение для обмена цитатами с помощью Webapp.Очевидно, что очень важно иметь возможность давать произвольные теги для каждой цитаты.

Итак, вот соответствующий код, который я придумал: (В основном из примера приложения чата в большой вводной книге ' Использование Google App Engine ')

class Quote(db.Model):
  user = db.ReferenceProperty()
  text = db.StringProperty()
  tags = db.StringListProperty()
  created = db.DateTimeProperty(auto_now=True)

И 'view':

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.Я много гуглил, но не мог найти руководство по реализации тегов.Поэтому я очень ценю вашу помощь, чтобы исправить эту ошибку, или, вернее, указать мне на более элегантный способ работы с тегами.

1 Ответ

4 голосов
/ 08 декабря 2011

Попробуйте использовать split(), чтобы превратить tgs в список слов перед созданием Quote.Теги должны быть разделены пробелами в вашей форме, в противном случае вы можете добавить аргумент к split, если вы хотите разделить их чем-то другим.

...
tgs = self.request.get('tags').split()
newq = Quote(user = self.session['userkey'], text=msg, tags= tgs)
...
...