Python 谷歌应用引擎:找不到404资源
我正在尝试用Python中的GoogleAppEngine构建一个基本的博客模型。然而,我想我的代码有点问题,当我试图在一个页面上显示所有已发布的博客条目时,我遇到了404错误。下面是python代码:Python 谷歌应用引擎:找不到404资源,python,database,google-app-engine,Python,Database,Google App Engine,我正在尝试用Python中的GoogleAppEngine构建一个基本的博客模型。然而,我想我的代码有点问题,当我试图在一个页面上显示所有已发布的博客条目时,我遇到了404错误。下面是python代码: import os import re import webapp2 import jinja2 from string import letters from google.appengine.ext import db template_dir = os.path.join(os.path
import os
import re
import webapp2
import jinja2
from string import letters
from google.appengine.ext import db
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
def post_key(name = "dad"):
return db.Key.from_path('blog', name)
class Blogger(db.Model):
name = db.StringProperty()
content = db.TextProperty()
created = db.DateTimeProperty(auto_now_add = True)
def render(self):
self._render_text = self.content.replace('\n', '<br>')
return render_str("post.html", p = self)
class MainPage(Handler):
def get(self):
self.response.write("Visit our blog")
class BlogHandler(Handler):
def get(self):
posts = db.GqlQuery("SELECT * FROM Blogger order by created desc")
self.render("frontblog.html", posts = posts)
class SubmitHandler(Handler):
def get(self):
self.render("temp.html")
def post(self):
name = self.request.get("name")
content = self.request.get("content")
if name and content:
a = Blogger(name = name, content = content, parent = post_key())
a.put()
self.redirect('/blog/%s' % str(a.key().id()))
else:
error = "Fill in both the columns!"
self.render("temp.html", name = name, content = content, error = error)
class DisplayPost(Handler):
def get(self, post_id):
po = Blogger.get_by_id(int(post_id))
if po:
self.render("perma.html", po = po)
else:
self.response.write("404 Error")
app = webapp2.WSGIApplication([('/', MainPage),
('/blog', BlogHandler),
('/blog/submit', SubmitHandler),
('/blog/([0-9]+)', DisplayPost)], debug=True)
以下是frontblog.html源代码,以防对您有所帮助:
<!DOCTYPE html>
<html>
<head>
<title>CS 253 Blog</title>
</head>
<body>
<a href="/blog">
CS 253 Blog
</a>
<div id="content">
{% block content %}
{%for post in posts%}
{{post.render() | safe}}
<br></br>
{%endfor%}
{% endblock %}
</div>
</body>
</html>
CS253博客
{%block content%}
{posts%%中的post为%s}
{{post.render()| safe}}
{%endfor%}
{%endblock%}
所以基本上,我没有被重定向到permalink页面。有什么问题吗?当你创建帖子时,你给了它一个家长(不知道为什么)。但是当你得到它时,你只需要ID,而不需要考虑父ID。在数据存储中,一个键实际上是一个由所有父种类和ID/名称组成的路径,然后是当前实体的ID/名称,要得到一个对象,你需要通过完整的路径 可能的解决办法如下:
- 删除父键,因为它在这里没有任何作用,因为您总是将它设置为相同的值李>
- 获取对象时使用它:
-显然,这只在父对象始终相同的情况下有效李>Blogger.get\u by\u id(post\u id,parent=parent\u key())
- 在路径中使用完整的字符串化键,而不仅仅是ID,然后执行
-您还需要更改路由正则表达式以接受字母数字字符,例如Blogger.get(key)
,并将重定向更改为'/blog/(\w+)
'/blog/%s'%a.key()
sub
path。你到底从哪里得到的?就在我在“/blog/submit”页面上提交姓名和内容的时候。我没有被重定向到permalink页面,而是被重定向到“/sub”并得到404错误消息!嗯,“sub”是“submit”的子字符串这一事实很有启发性,但我看不出是什么在起作用。我知道。真奇怪。另外,当我检查SDK时,我可以看到日志也没有存储在数据库中。
<!DOCTYPE html>
<html>
<head>
<title>CS 253 Blog</title>
</head>
<body>
<a href="/blog">
CS 253 Blog
</a>
<div id="content">
{% block content %}
{%for post in posts%}
{{post.render() | safe}}
<br></br>
{%endfor%}
{% endblock %}
</div>
</body>
</html>