如何在 Flask/GAE 中渲染标签?

Posted

技术标签:

【中文标题】如何在 Flask/GAE 中渲染标签?【英文标题】:How to render tags in Flask/GAE? 【发布时间】:2012-01-14 08:39:42 【问题描述】:

我对所有这些都是新手,并试图弄清楚如何使用标签制作简单的博客文章。 以下是相关部分:

型号:

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()])

模板:

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

问题是,无论我在标签字段中输入什么,模板都会呈现一个空列表(即“[]”)而不是标签。感谢您提供解决此问题的提示。

【问题讨论】:

【参考方案1】:

我认为您需要自定义自己的 WTForm 字段,而不是使用 TextField。 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

【讨论】:

以上是关于如何在 Flask/GAE 中渲染标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React with Coffeescript 中渲染 HTML 标签?

如何在 JSX 中渲染脚本标签而不手动创建它

如何在页面中显示并识别HTML 标签字段

如何在 Django 模板中的“带有模板标签”中设置 Django 渲染块值?

我如何在 ruby​​ slim 中渲染 css 内联,因为输出 css 没有插入到样式标签中

如何在 NextJS 中更新 <Image /> 标签的 src 而无需重新渲染整个组件