2014-01-26 7 views
1

Я начал преподавать основы веб-разработки с помощью python в Google App Engine и веб-фрейме webapp2.Обработка нескольких URL-скриптов в Google App Engine

В принципе, я хотел бы создать домашнюю страницу, где я разместим все ссылки на разные проекты. каждая ссылка направит на новый url, где будет запущен соответствующий файл py.

на данный момент, все, что я хочу, это иметь одну ссылку, которая направляется на страницу Hello World. это оно. и для жизни меня я не могу понять, как написать обработчик для этого события (мне даже нужен адлер?). может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

моя структура файлов:

+Main Directory (Folder) 
    - app.yaml 
    - index.py 
    +helloworld (Folder) 
     __init__.py 
     helloworld.py 

app.yaml файл:

application: untitam 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url:/
    script: index.app 

- url: /helloworld.* 
    script: helloworld.app 

- url: /.* 
    script: index.app 

libraries: 
- name: webapp2 
    version: latest 

index.py:

import webapp2 

menu=""" <nav> 
<ul> 
<li> <a href="/helloworld">Hello World</a></li> 
</ul> 
</nav> 
""" 

class HomePage (webapp2.RequestHandler): 
    def get(self): 
     self.response.out.write(menu) 

class HelloHandler(webapp2.RequestHandler): 
    def get(self): 
     pass 

app = webapp2.WSGIApplication([('/', HomePage), 
           ('/helloworld', HelloHandler)], debug=True) 

и helloworld.py:

import webapp2 

class HelloWorld(webapp2.RequestHandler): 

    def get(self): 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.write('Hello, World!') 

application = webapp2.WSGIApplication([('/helloworld', HelloWorld),], debug=True) 

, когда я нажимаю ссылку Hello World я получаю ссылку на локальный хост: 8080/HelloWorld, но я вижу пустую страницу. в журнале указано: ImportError: Нет модуля с именем app

Что следует писать в index.py для запуска helloworld после того, как пользователь нажмет на ссылку. обратите внимание, что index.py и helloworld.py не находятся в одной папке. каждый проект будет иметь свою собственную папку, так как позже я буду использовать html/css-шаблоны и некоторые javascripts.

заранее спасибо

+4

ни один модуль с именем app не потому, что в helloworld.py вы создаете «приложение», а не «приложение». Я предлагаю вам начать с более простого рабочего примера, полученного из демонстрации, и настроить его шаг за шагом, пока он не сделает то, что вы хотите, и/или прочитайте учебник здесь: http://webapp-improved.appspot.com/guide/routing .html –

+0

Благодарим вас за ответ. Я работал над учебником, но не смог получить ответ на мою проблему.я предполагаю, что я не знаю, как сказать python импортировать другой файл из другой папки. это может быть из-за того, что я ноб, но просматриваю этот сайт, но до сих пор не могу понять, как это сделать. Любые мысли/примечания к моему коду? – tamiros

+0

Проблема не в импорте файлов из других папок. сделай это. https://www.udacity.com/course/viewer#!/c-cs253/l-48230541/e-48689147/m-48646718 –

ответ

1

Как сказал Павел, я хотел бы также начать с более простым примером с одним приложением WebAPP (который все еще может обрабатывать несколько URL-адресов). С изменяет следующий ваш пример должен работать, хотя:

app.yaml файл:

- url: /helloworld.* 
    script: helloworld.helloworld.application 

helloworld.helloworld.application на самом деле относится к переменной приложения, определенного в helloworld.py в HelloWorld package (в index.py вместо этого используется приложение).

Вы можете удалить маршрут HelloWorld из index.py так /HelloWorld направляется helloworld.py, как это определено в app.yaml:

index.py:

app = webapp2.WSGIApplication([('/', HomePage)], debug=True) 
Смежные вопросы