Нужна помощь в создании постоянных ссылок в Google App Engine

Поэтому я пытаюсь создать уникальную постоянную ссылку каждый раз, когда человек публикует на моей веб-странице, и я хочу, чтобы она была относительно дружественной для поисковых систем, поэтому я сделал небольшой код, чтобы изменить заголовок на хороший заголовок поисковой системы, и он работает, но тогда мой обработчик не может принять это. По крайней мере, это то, что я думаю, происходит потому, что веб-страница просто дает мне ошибку 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.

ОБНОВИТЬ:

URL-адрес теста, который я использую, - это настройка

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

Затем приложение направляет меня на www.url.com/blog/1234/test-url, но выдает ошибку 404.

2 ответа

Решение

Вы определяете две группы в ('/blog/([0-9]+)/([.*]+) но ваш PostPage.get() принимает только один.
Измените его на def get(self, post_id, subject) или удали вторую группу ('/blog/([0-9]+)/[.*]+

Я думаю, что вы должны взглянуть на цитаты по отображению вашего обработчика, это кажется противоречивым.

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

  • пытаться: app = webapp2.WSGIApplication(['/blog/([0-9]+)/([.*]+)', PostPage)]

Другие вопросы по тегам