【发布时间】:2012-08-23 03:25:01
【问题描述】:
我是 Python、Google AppEngine 和 Jinja 的新手。如果我在下面发布了太多代码,我很抱歉。这是我在 StackOverflow 上发布的第一个问题。
我正在构建一个博客(为一个班级),我需要替换用户帖子中的换行符“\n”。查询数据库的函数将其结果发送到 render() 函数。
在我添加应该替换“\n”的代码行之前,所有代码都可以正常运行。
我进行了各种编辑,但我无法推断 AppEngine、Jinja 或 Python 要我做什么来满足它。
我的数据库类设置 db_blog Kind 有四种类型,包括 'post_content'
class db_blog(db.Model):
post_subject = db.StringProperty(required = True)
post_content = db.TextProperty(required = True)
post_created = db.DateTimeProperty(auto_now_add = True)
post_last_modified = db.DateTimeProperty(auto_now_add = True)
“Newpost”类我希望它从下面的Blog类接收“query_select”对象。
class Newpost(webapp2.RequestHandler):
def write(self, *args, **kwds):
self.response.out.write(*args, **kwds)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kwds):
self._render_text = self.post_content.replace("\n", "<br />") ##<-- See here
self.write(self.render_str(template, **kwds))
博客类获取所有用户帖子并将它们发送到“Newpost”以进行呈现。
class Blog(Newpost):
def get(self):
query_select = db.GqlQuery("SELECT * FROM db_blog ORDER BY post_created DESC")
self.render('blog_posts.htm', query_select = query_select)
1。 如上图,代码会产生这个错误:
AttributeError: 'Blog' 对象没有属性 'post_content'
我认为 Blog 类需要从 db_blog 继承,所以(参见 #2)
2。如果我将 db_blog 添加到 Blog 类的参数列表中,我会收到一个新错误:
AttributeError: 'NoneType' 对象没有属性 'replace'
我认为错误告诉我我正在传递一个不存在的对象,所以我真的很困惑。如果我注释掉试图替换“\n”字符的行,这段代码运行完美——那么它怎么能不传递对象呢?或者声称它 == 无?
更重要的是,我怎样才能让它工作!
非常感谢读到这里的你,感谢他/她的财富王国,让我继续前进。
【问题讨论】:
-
尝试将“\n”替换为“\\n”。如果您接收信息的方式包括文本“\n”而不仅仅是一个新行,那么您需要这样表示。 python中的“\n”是一个只包含一个新行的字符串,而“\\n”取消了反斜杠,因此实际上包含了文本“slash n”。
-
顺便说一句,您最好将模型名称更改为使用 CamelCase(“DB_Blog”或更具描述性的“BlogPost”),这更符合 Python 风格(并且清楚地表明它是一个类,而不是一个函数/对象)。您还可以考虑将
query_select的名称更改为更具描述性的名称(例如posts或post_query或类似名称),这将使您和其他人更容易理解您的代码。 -
感谢两位的回复。对象的命名(原文如此)对我来说很重要,在对代码中的每个对象有全局理解之前很难做到。把尾巴钉在旋风上。
标签: python google-app-engine inheritance scope jinja2