2012-04-04 3 views
1
で定義されています

私は今トルネードを学んでいます。それは素晴らしいフレームワークだと思います。 いくつかのメソッドをmain.pyから分離するまでは、すべてうまくいきます。tornado.options.Error:オプションは既に

例:

私のサーバー起動プログラムのmain.pyにあります。私はこのようないくつかのプロパティを定義するためにtornado.options.defineを使用します。

define("port", default=8888, help="run on the given port", type=int) 
define("mysql_host", default="127.0.0.1:3306", help="blog database host") 
define("mysql_database", default="forum", help="database name") 
define("mysql_user", default="root", help="database user") 
define("mysql_password", default="passwd", help="database password") 

をそしてそれでたBaseHandlerがあります:

class BaseHandler(tornado.web.RequestHandler): 
@property 
def db(self): 
    return self.application.db 

def get_current_user(self): 
    return self.get_secure_cookie("username") 

、別のファイルには、すべてのハンドラでは、そのようなtopic.pyとして、

:私は私のプログラムを起動するとき、問題が起こる

from main import BaseHandler 

:topic.pyはmain.pyでたBaseHandlerを拡張しますので、私はこのようたBaseHandlerをインポート

Traceback (most recent call last): 
    File "/Users/abc/money/main.py", line 85, in <module> 
    define("port", default=8888, help="run on the given port", type=int) 
    File "/Library/Python/2.7/site-packages/tornado-2.2-py2.7.egg/tornado/options.py", line 93, in define 
options[name].file_name) 
tornado.options.Error: ('Option %r already defined in %s', 'port', '/Users/suyejun/Dropbox/money/main.py') 

このような問題を回避するにはどうすればよいですか?あるいは、コードを書く別の方法がありますか?

+0

私がこれを複製できる唯一の方法は、topic.pyのdefine()(ポート用)です。 topic.pyでdefine()を使用していませんか? –

+0

いいえ、topic.pyにdefine()はありません。そこに 'from main import BaseHandler'だけあり、main.pyにはdefine()しかありません。 baseHandlerをbase.pyのような孤独なファイルに入れて、これまで 'main main'を呼び出す必要はありません。 – goofansu

答えて

3

BaseHandlerをmain.pyとは異なるファイルに移動する必要があります。問題は、効果的にmain.pyのコードを2回読み込んでいることです。アプリケーションを起動し、topic.pyにコードをインポートするときに、一度。

「pagemanager.py」のような別のファイルを作成し、共有クラス、関数、コードをそこに置くことをお勧めします。次に、それらをmain.pyとtopic.pyの両方にインポートして、Tornadoの初期化に固有のコードで問題を引き起こさないようにします。

+0

私はそれをやった。私はBaseHandlerをbase.pyに移動し、うまくいく。ありがとうございます – goofansu

+0

私は助けることができてうれしい! – Drahkar

+0

私の問題を解決しました!ありがとうございました! –

関連する問題