2

私の厄介なpythonアプリを動作させようとしています。@unutbu hereの助けを借りて問題を解決しました。

私の次の問題は、少し奇妙なことが起こっていることです。スタック トレースには、私のコードに関連するものは何も表示されません。

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 239, in process
    return self.handle()
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 230, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 419, in _delegate
    cls = fvars[f]
KeyError: u'Home'

私が web.py 関数を呼び出す唯一のスクリプトは次のとおりです。

#Application/App.py
import web
class AppInstance(object):
    def __init__(self):
        from Views import Home
        self.urls = (
                "/", "Home",
                )
        self.app = web.application(self.urls, globals())
    def run(self):
        self.app.run()

この男は、ファイルシステムの上位ディレクトリにあるスクリプトから呼び出されます。

#start.py
from Application import App
app = App.AppInstance()
app.run()

必要に応じて、上記の質問からディレクトリ レイアウトがどのように見えるかをコピーできますが、ここで多くの混乱が発生するため (ツリー コマンドの出力)、現在は実行していません。私の質問は、ディレクトリ構造への最小限の変更でこの問題を解決するにはどうすればよいですか?


アプリケーションのディレクトリ構造を追加することは、自分の問題を解決するためにこれを読んで助けたい人にとって役立つはずです。

Blog/
├── Application/
│   ├── App.py
│   └── __init__.py
|
├── Engine/
│   ├── Connection/
│   │   ├── __init__.py
│   │   └── MySQLConnection.py
│   ├── Errors.py
│   └── __init__.py
├── __init__.py
├── Models/
│   ├── BlogPostModel.py
│   └── __init__.py
├── start.py
└── Views/
    ├── Home.py
    └── __init__.py

このことは始まったばかりで、ブログ エンジンを提供することを目的としており、今日までに学んだことを完全で有用なものに実装するのに役立ちます。

4

1 に答える 1

2

の2番目の引数web.applicationは、潜在的なハンドラーの辞書である必要があります。あなたの場合、あなたHomeはそれに参加したいのですが、そのバインディングはローカル変数にのみあります。localsの代わりに呼び出すglobals

import web
class AppInstance(object):
    def __init__(self):
        from Views import Home
        self.urls = (
                "/", "Home",
                )
        self.app = web.application(self.urls, locals())
        #                                     ^^^^^^
    def run(self):
        self.app.run()

またはインポートを移動します:

import web
from Views import Home # <-- Moved into global namespace
class AppInstance(object):
    def __init__(self):
        self.urls = (
                "/", "Home",
                )
        self.app = web.application(self.urls, globals())
    def run(self):
        self.app.run()
于 2012-11-04T18:35:24.750 に答える