无法根据Python GAE中的键在浏览器中查看项目

Cug*_*uga 1 python google-app-engine web-applications

我正在使用带有webapp的python GAE.

我有一个表单供用户在数据库中创建一个对象,如:

class SpamRecord(db.Model):
    author = db.ReferenceProperty(Author, required=True)
    text = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)

在创建之后,用户被重定向到其URL包含该对象的密钥的页面...使用如下代码:

spam = SpamRecord(author=author, text=text)
spam.put()
new_spam_key = spam.key()
self.redirect("/view_spam/%s" % new_spam_key)
Run Code Online (Sandbox Code Playgroud)

主要是有效的,我可以在以下位置查看项目:

sitename.com/view_spam/ag1waWNreXByZXNlbnRzchQLEgxBbm5vdW5jZW1lbnQYy8oJDA sitename.com/view_spam/ag1waWNreXByZXNlbnRzchQLEgxBbm5vdW5jZW1lbnQY_boJDA

但是,偶尔会出现一些不起作用的密钥.以下是最近2个不会加载和返回HTTP 404 not found错误的页面示例:

sitename.com/view_spam/ag1waWNreXByZXNlbnRzchQLEgxBbm5vdW5jZW1lbnQY-5MJDA sitename.com/view_spam/ag1waWNreXByZXNlbnRzchQLEgxBbm5vdW5jZW1lbnQY-boJDA

html-mappings.py包含以下映射:

(r"/view_spam/(\w+)", ViewSpamPage)
Run Code Online (Sandbox Code Playgroud)

而且ViewSpamPage看起来是这样的:

class ViewSpamPage(webapp.RequestHandler):
    def get(self, spam_id):
        self.response.out.write("Got here")
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供任何有关为什么会发生这种情况以及如何预防这种情况的见解?

非常感谢!

Dav*_*ith 6

在正则表达式中,\w不匹配连字符.(它将匹配下划线.)对于第二对键,这将导致仅将部分键传递给处理程序.

在您的网址格式中,请尝试r"/view_spam/(.*)"改为.