2016-02-06 6 views
0

В настоящее время я создаю базовый веб-сайт для своего класса веб-дизайна с использованием python, html и google-приложения. Я могу сделать сайт с помощью нескольких обработчиков, но мы должны сделать сайт с несколькими страницами, используя только 1 обработчик.Как объединить несколько обработчиков в один, используя python и self.request.path

я могу получить обработчик, такие как:

class IndexHandler(webapp2.RequestHandler): 
    def get(self): 
    template = JINJA_ENVIRONMENT.get_template('templates/index.html')) 
    self.response.write(template.render({'title': 'HOME', 'header':'HOME'})) 

class FriendHandler(webapp2.RequestHandler): 
    def get(self): 
    template = JINJA_ENVIRONMENT.get_template('templates/friends.html') 
    self.response.write(template.render({'title': "FRIENDS", 'header': "FRIENDS"})) 

работать, но когда я пытаюсь объединить их с помощью:

class AllTheHandlers(webapp2.RequestHandler): 
    def get(self): 
    template = JINJA_ENVIRONMENT.get_template('templates%s' % self.request.path) 
    self.response.write(template.render({'title', 'header'})) 
    outstr = template.render(temp, { }) 
    self.response.out.write(outstr) 

Я получаю ошибку 404, и мой журнал говорит:

INFO  2016-02-06 06:14:13,445 module.py:787] default: "GET/HTTP/1.1" 404 154 

любая помощь была бы очень оценена, даже указатели на то, как использовать атрибут self.request.path, было бы полезно I thi пк. Я чувствую, что часть моего вопроса имеет отношение к концу моего кода, но я не уверен:

app = webapp2.WSGIApplication([ 
    ('/', AllTheHandlers), 
    # ('/bio.html', AllTheHandlers), 
    # ('/index.html', AllTheHandlers), 
    # ('/friends.html', AllTheHandlers), 
    # ('/horses.html', AllTheHandlers), 
], debug=True) 

спасибо за любую помощь вы можете предоставить!

ответ

1

Error 404 означает, что ваш RequestHandler даже не достигнут. Проблема заключается в URI routing.

В настоящее время, у вас есть только один маршрут, сконфигурированный:

app = webapp2.WSGIApplication([ 
    ('/', AllTheHandlers), 

Это не означает, что / и все под ним, как вы можете ожидать. Это означает / и ничего больше.

Если вы хотите, чтобы обслуживать несколько простых шаблонов HTML, вы можете изменить его в следующем:

class AllTheHandlers(webapp2.RequestHandler): 
    def get(self, html_page): 
    template = JINJA_ENVIRONMENT.get_template('templates/%s' % html_page) 
    # ... 

app = webapp2.WSGIApplication([ 
    ('/(\w+\.html)', AllTheHandlers), 
], debug=True) 

(\w+\.html) является regular expression, который соответствует someword.html. Поскольку мы помещаем его в скобки, он выхватывается и переносится в get() в качестве аргумента. Затем мы можем просто выбрать подходящий шаблон.


ОТКАЗ: Код выше не следует рассматривать как хорошая практика - это просто иллюстрация того, как работает маршрутизация.

+0

ОК, я понимаю части об ошибке и только один маршрут настроен, но я знаю, что я должен использовать self.request.path. Я могу получить доступ к странице, но теперь она говорит мне: TemplateNotFound: templates/и я не совсем уверен, как двигаться вперед с этим. Он не понимает, что должен использовать мой файл index.html в качестве домашней страницы. Я думаю, что многое из этого только связано с тем, что я не понимаю self.request.paths, любое разъяснение будет большим спасибо! –