【问题标题】:Trying to format Google App Engine DateTimeProperty for template尝试为模板格式化 Google App Engine DateTimeProperty
【发布时间】:2011-04-19 02:14:17
【问题描述】:

我在 GAE 上使用 Tornado 框架 (Python)。我对整个 MVC 概念和 GAE 还是有点陌生​​......并且有一段时间试图弄清楚如何做到这一点。

我有一个表格(模型)帖子,其中包含字段用户、文本、创建日期。

我拉取代码中的所有帖子,然后将其发送到模板。我想格式化 creation_date 字段,使其格式更好一些。像 M-d-Y 这样的东西。我知道我使用 strptime 或 strftime 来格式化 creation_date。但是在将帖子发送到模板之前,我不确定该怎么做。

这是我用来获取帖子并将其发送到模板的内容...

class HomeHandler(BaseHandler):
    def get(self):
        posts = Post.all()
        posts.order("-creation_date")
        self.render('home.html', posts=posts)

更新:

posts = Post.all().order("-creation_date").fetch(50)
posts = [{'text': post.text} for post in posts]
for post in posts:
        print post.text

我收到的错误消息:

AttributeError: 'dict' 对象没有属性 'text'

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    假设您使用的是 Tornado 的 template 模块,它包括 datetime 模块。我没用过 Tornado 的模板模块,但是你应该可以用:

    entity.datetime_property.strftime('%m-%d-%y')
    

    如果您想在将模型发送到模板之前对其进行处理,请尝试以下操作:

    class HomeHandler(BaseHandler):
      def get(self):
        posts = Post.all().order("-creation_date").fetch(50)
        posts = [{'author': post.author,
                  'subject': post.subject,
                  'date': post.date} for post in posts]
        self.render('home.html', posts=posts)
    

    在您的模板帖子中将包含一个字典列表,其中包含作者、主题和日期字段。

    使用 fetch 限制您返回的帖子数量;它将通过一次抓取(最多)50 个实体而不是小批量抓取它们来提高性能。

    【讨论】:

    • 哎呀,我撒谎了!我以为我得到了第二部分的工作,但我错了。我得到“AttributeError:'dict'对象没有属性'text'”
    • 你能发布你在处理程序和模板中使用的实际代码吗?
    • 对不起,我还是这个网站的新手......我试图将代码放在评论中。我刚刚用问题的一些基本版本更新了原始帖子。
    • 好的。打印出来。现在我要弄清楚如何在模板中使用 post['text'] 。不过,这对我来说仍然很困惑。当我执行 posts = Post.all() 并输入“打印帖子”时,我得到“”。但是当我循环遍历它时,“print post.text”可以工作。然后当我添加你给我的代码行时,我可以“打印帖子”并在字典中打印出字典?
    • 我给你的代码可以让你在处理程序中处理帖子,然后再将它们发送到模板。在这种情况下,它是使用列表理解 (docs.python.org/tutorial/…) 完成的。这是令人困惑的部分,我认为要访问字典元素在django模板中您使用“点表示法,即dictionary.element。如果您只想遍历模板中的所有实体,只需省略列表理解(posts = [...] 部分)。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2018-04-09
    • 2011-04-25
    • 2012-09-14
    相关资源
    最近更新 更多