2017-04-12 11 views
1

多くの静的なHTMLファイルを含むウェブサイトを設定しようとしています。現在、私は私が今行う必要がある何Googleのアプリケーションエンジンでhtmlファイルを配信し、pythonスクリプトを実行

- url: /(.*) 
static_files: www/\1 
upload: www/(.*) 
secure: always 

のapp.yamlをハンドラと静的ファイルとしてHTMLファイルを提供しています誰かがこれらのHTMLファイルの1つにリダイレクトされるたびに、いくつかのPythonコードを実行する機能です。

htmlファイルを静的ファイルとして提供する方法はありますか?呼び出されたときにpythonスクリプトを実行しますか?もちろん、javascriptのほかに。

私の最初の考えは、スクリプトを実行するhtmlファイル用のハンドラを用意し、次にそのスクリプトが必要とするバックエンドタスクを行い、webapp2またはjinjaを使用してhtmlファイルをテンプレートとして提供することでした。私のhtmlファイルは、いくつかのサブディレクトリに、いくつかのディレクトリの下に私のpythonファイルから保存されています。

-app.yaml 
-main.py 
-www 
    -version1 
     --sub directories stored here 

現在の仕事にこれを試してみて得るために私のテストハンドラは次のようになります。

class testHandler(BaseHandler): 

    def get(self, url): 

     tplPath = self.request.url 
     parseURL = urlparse(tplPath) 

     path = "www" + dirname(parseURL.path) 
     filename = basename(parseURL.path) 

     return jinja2.Environment(
     loader=jinja2.FileSystemLoader(path) 
    ).get_template(filename).render() 

この要求されたURLまたはHTMLファイルを取得し、パスのwww部分を追加して(サイドノート、元のウェブサイトレイアウトと一貫性を保つために提供URLからwww部分を削除しました)、htmlファイルをレンダリングしようとしますパスフォルダにあります。

私はこれを実行しようと、HTTPSにアクセスして言う:// AppID.appspot.com/version1/product1/index.htmlは、私が

TemplateNotFound: index.html 

エラーを取得し、私がされているパスを確認ローダに送信され、index.htmlファイルを含むディレクトリへの正しいパスです。

ここには何かが欠けていますか? jinja2を使った私の経験は非常に限られていることに留意してください。代わりに、私はpythonスクリプトを実行し、まだhtmlファイルを提供することができる他の方法はありますか?どんな助けもありがとうございます。

答えて

0

テンプレートへの相対パスを使用しており、Jinja2は絶対パスがthis postになる必要があります。だからではなくpath = "www" + dirname(parseURL.path)のは、次の操作を行います

# assuming that dirname is os.path.dirname: 
path = os.path.join(dirname(__file__),"www" + dirname(parseURL.path)) 
この行は、それが __file__のディレクトリ名を取得している何

、および__file__は、あなたが実行している現在の*.pyファイルの完全な絶対パスです。したがって、dirname(__file__)は作業ディレクトリです。その1行を置き換えた後、残りのコードが動作するはずです。

関連する問題