1

Apache 2.2 HTTP サーバーで実行しようとしている小さな Django Web サイトがあります。アプリケーションは、「python manage.py runserver」を使用して正常に動作しています。

Django バージョン: 1.0.2 最終版
Python: 2.5
OS: Windows 2000

ドキュメントに記載されている手順を実行していませんでした。いじった後、httpd.confに次のように表示されました。

<Location "/therap/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonOption django.root /therap
PythonDebug On
PythonPath "['D:/therap/therap'] + sys.path"
</Location>

MaxRequestsPerChild 1

D:\therap\therap は私の manage.py がある場所です。

ブラウザで開こうとすると、Django で使用されているスタイルにエラーが表示されます (白い背景に黒いクーリエではなく)。

ImportError at /

No module named therap.urls

Request Method: GET
Request URL:    http://****:8080/
Exception Type: ImportError
Exception Value:   

No module named therap.urls

Exception Location: C:\python25\lib\site-packages\django\core\urlresolvers.py in _get_urlconf_module, line 200
Python Executable:  C:\Programme\Apache Software Foundation\Apache2.2\bin\httpd.exe
Python Version:     2.5.1
Python Path:        ['D:/therap/therap', 'C:\\WINNT\\system32\\python25.zip', 'C:\\Python25\\Lib', 'C:\\Python25\\DLLs', 'C:\\Python25\\Lib\\lib-tk', 'C:\\Programme\\Apache Software Foundation\\Apache2.2', 'C:\\Programme\\Apache Software Foundation\\Apache2.2\\bin', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\pyserial-2.2', 'C:\\Python25\\lib\\site-packages\\win32', 'C:\\Python25\\lib\\site-packages\\win32\\lib', 'C:\\Python25\\lib\\site-packages\\Pythonwin', 'C:\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode']
Server time:        Mo, 23 Mär 2009 16:27:03 +0100

D:\therap\therap に urls.py があります。ただし、ほとんどのコードがある D:\therap\therap\main にはありません。

次に、親フォルダーを使用してみました

<Location "/therap/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE therap.settings
    PythonOption django.root /therap
    PythonDebug On
    PythonPath "['D:/therap'] + sys.path"

</Location>

MaxRequestsPerChild 1

別のエラーが発生しました:

MOD_PYTHON ERROR

ProcessId:      2424
Interpreter:    '***'

ServerName:     '****'
DocumentRoot:   'C:/Programme/Apache Software Foundation/Apache2.2/htdocs'

URI:            '/therap/'
Location:       '/therap/'
Directory:      None
Filename:       'C:/Programme/Apache Software Foundation/Apache2.2/htdocs/therap'
PathInfo:       '/'

Phase:          'PythonHandler'
Handler:        'django.core.handlers.modpython'

Traceback (most recent call last):

  File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1537, in HandlerDispatch
    default=default_handler, arg=req, silent=hlist.silent)

  File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1229, in _process_target
    result = _execute_target(config, req, object, arg)

  File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1128, in _execute_target
    result = object(arg)

  File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 228, in handler
    return ModPythonHandler()(req)

  File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 201, in __call__
    response = self.get_response(request)

  File "C:\python25\Lib\site-packages\django\core\handlers\base.py", line 67, in get_response
    response = middleware_method(request)

  File "C:\python25\Lib\site-packages\django\middleware\locale.py", line 17, in process_request
    translation.activate(language)

  File "C:\python25\Lib\site-packages\django\utils\translation\__init__.py", line 73, in activate
    return real_activate(language)

  File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 209, in activate
    _active[currentThread()] = translation(language)

  File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 198, in translation
    default_translation = _fetch(settings.LANGUAGE_CODE)

  File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 183, in _fetch
    app = __import__(appname, {}, {}, [])

ImportError: No module named main

私は国際化モジュールを使用していますが、現時点で問題が発生する理由がわかりません。

「main」は、唯一の Django アプリ (ビュー、モデル、フォームなどを含む) の名前です。フル パスは D:\therap\therap\main です。

__init__.pyメインフォルダーからd:\ therapまで、どこにでも-filesを配置しました。

今、私は他に何ができるかわかりません。何か案は?

4

1 に答える 1

3

問題は、アプリ (「メイン」) を Python パスに直接存在するかのようにインポートし、URLconf (「therap.urls」) を Python パスの「therap」モジュール内に存在するかのようにインポートしていることです。これは、「D:/therap」と「D:/therap/therap」の両方が Python パス上にある場合にのみ機能します (runserver は自動的に「物事を簡単にする」ために実行しますが、最終的には混乱を遅らせるだけです)展開時間)。Apache 構成で次の行を使用して、runserver の動作をエミュレートできます。

PythonPath "['D:/therap', 'D:/therap/therap'] + sys.path"

おそらく、参照を標準化して、Python パスにどちらか一方のみを含める必要があるようにする方が理にかなっています。通常の方法 (少なくとも私がよく参照する方法) は、Python パスに "D:\therap" を配置し、アプリを "main" ではなく "therap.main" として修飾することです。個人的には、私は反対のアプローチを取っており、問題なく動作します。Python パスに "D:\therap\therap" を配置し、ROOT_URLCONF を "therap.urls" ではなく "urls" に設定します。これの利点は、将来、「メイン」アプリを再利用可能にして特定のプロジェクトから移動したい場合、それへの参照がプロジェクト名「therap」に結び付けられないことです (ただし、「」という名前のアプリを使用します)。 main" とにかく、再利用可能なアプリの観点から考えているようには聞こえません)。

于 2009-03-24T02:38:00.313 に答える