2011-12-06 46 views
5

Tôi mới làm quen với tất cả những điều này và cố gắng tìm ra cách tạo một bài đăng blog đơn giản bằng các thẻ. Sau đây là các bộ phận liên quan:Làm cách nào để hiển thị thẻ trong Flask/GAE?

mẫu:

class Post(db.Model): 
    title = db.StringProperty(required = True) 
    content = db.TextProperty(required = True) 
    when = db.DateTimeProperty(auto_now_add = True) 
    author = db.UserProperty(required = True) 
    tags = db.ListProperty(db.Category) 

WTForm:

class PostForm(wtf.Form): 
    title = wtf.TextField('Title', validators=[validators.Required()]) 
    content = wtf.TextAreaField('Content', validators=[validators.Required()]) 
    tags = wtf.TextField('Tags', validators=[validators.Required()]) 

mẫu:

{% block content %} 
<ul> 
    <h1 id="">List of Posts</h1> 
    {% for post in posts %} 
    <li> 
     {{ post.title } By {{ post.author.nickname() }})<br /> 
     {{ post.content }}<br /> 
     Author {{ post.author }} <br /> 
     Tags {{ post.tags}} <br />    
    </li> 
    {% endfor %} 
</ul> 
{% endblock %} 

Vấn đề là không có vấn đề gì tôi nhập vào các thẻ trường, mẫu sẽ hiển thị một danh sách trống (tức là '[]') thay vì các thẻ. Tôi đánh giá cao gợi ý của bạn để sửa lỗi này.

Trả lời

3

Tôi nghĩ bạn cần tùy chỉnh trường WTForm của riêng bạn thay vì sử dụng TextField. Có một số mã mẫu trên tài liệu wtforms.

http://wtforms.simplecodes.com/docs/0.6.1/fields.html#custom-fields

class TagListField(Field): 
    widget = TextInput() 

    def _value(self): 
     if self.data: 
      return u', '.join(self.data) 
     else: 
      return u'' 

    def process_formdata(self, valuelist): 
     if valuelist: 
      self.data = [x.strip() for x in valuelist[0].split(',')] 
     else: 
      self.data = [] 





class BetterTagListField(TagListField): 
    def __init__(self, label='', validators=None, remove_duplicates=True, **kwargs): 
     super(BetterTagListField, self).__init__(label, validators, **kwargs) 
     self.remove_duplicates = remove_duplicates 

    def process_formdata(self, valuelist): 
     super(BetterTagListField, self).process_formdata(valuelist) 
     if self.remove_duplicates: 
      self.data = list(self._remove_duplicates(self.data)) 

    @classmethod 
    def _remove_duplicates(cls, seq): 
     """Remove duplicates in a case insensitive, but case preserving manner""" 
     d = {} 
     for item in seq: 
      if item.lower() not in d: 
       d[item.lower()] = True 
       yield item 
Các vấn đề liên quan