【问题标题】:need help creating permalinks in google app engine需要帮助在谷歌应用引擎中创建永久链接
【发布时间】:2012-06-25 03:33:57
【问题描述】:

因此,每次有人在我的网页上发帖时,我都会尝试创建一个唯一的永久链接,并且我希望它对搜索引擎相对友好,因此我编写了一些代码来将标题更改为一个好的搜索引擎标题,并且正在工作,但我的处理程序无法接受它。至少这是我认为正在发生的事情,因为网页只是给了我一个 404 错误。 HTML 工作正常,因为当我重定向到静态页面时,它会全部通过。这是适用的代码:

def post(self):
    subject = self.request.get('subject')
    content = self.request.get('content')

    if subject and content:
        p = Post(parent = blog_key(), subject = subject, content = content)
        p.put()

        id=str(p.key().id())

        subject = str(subject)
        subject = subject.replace(' ', '25fdsa67ggggsd5')
        subject = ''.join(e for e in subject if e.isalnum())
        subject = subject.replace('25fdsa67ggggsd5', '-')
        subject = subject.lower()

        url = '/blog/%s/%s' % (id, subject)
        self.redirect('/blog/%s/%s' % (id, subject))

class PostPage(BlogHandler):
    def get(self, post_id):
       key = db.Key.from_path('PersonalPost', int(post_id), parent=blog_key())
       post = db.get(key)

       if not post:
          self.error(404)
          return

       self.render("permalink.html", post = post)

class PersonalPost(db.Model):
    subject = db.StringProperty(required = True)
    content = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)
    last_modified = db.DateTimeProperty(auto_now = True)
    user_id = db.StringProperty(required = True)

    def render(self):
        self._render_text = self.content.replace('\n', '<br>')
        return render_str("post.html", p = self)

def blog_key(name = 'default'):
    return db.Key.from_path('blogs', name)

app = webapp2.WSGIApplication([('/blog/([0-9]+)/([.*]+)', PostPage)]

当我将它重定向到主页并列出它们时它再次起作用,但当我尝试定向到新的 SEO 页面时它不起作用。

更新:

我正在使用的测试网址是设置

subject = "test-url"
id = "1234"

然后该应用程序将我定向到 www.url.com/blog/1234/test-url 但它给了我一个 404 错误。

【问题讨论】:

  • 这是您的实际缩进吗?您似乎试图在永远不会被调用的 post 函数中定义 PostPage 类...
  • 粘贴时缩进被打乱了,不过我只是修复了它。缩进在实际代码上都是正确的

标签: python google-app-engine google-cloud-datastore url-mapping


【解决方案1】:

您在 ('/blog/([0-9]+)/([.*]+) 中定义了两个组,但您的 PostPage.get() 只需要一个。
改成defget(self, post_id, subject)或者去掉第二组('/blog/([0-9]+)/[.*]+

【讨论】:

  • 仍然没有运气......仍然得到404。处理程序语法应该如何? ('/blog/([0-9]+)/([.*]+) 好吗?
  • @clifgray 请提供您正在使用的测试网址示例
【解决方案2】:

我认为你应该看看你的处理程序映射上的引号,它似乎不一致。

  • 你的:app = webapp2.WSGIApplication([('/blog/([0-9]+)/([.*]+)', PostPage)]

  • 试试:app = webapp2.WSGIApplication(['/blog/([0-9]+)/([.*]+)', PostPage)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多