最近出くわした問題で、解決したとしても、正しい/単純な/採用された解決策について、あなたの意見を聞きたいです。
Django + python を使用して Web サイトを開発しています。「python manage.py runserver」を使用してローカルマシンで実行すると、ローカルアドレスはデフォルトでhttp://127.0.0.1:8000/になります。
ただし、実稼働サーバーでは、私のアプリには「 http://server.name/myproj/」のようなパスを持つ他の URL があります。
永続的な URL を生成して使用する必要があります。{% url view params %} を使用している場合、urls.py にこれが含まれているため、 / に対する相対パスを取得しています。
urlpatterns = patterns('',
(r'^(\d+)?$', 'myproj.myapp.views.index'),
(r'^img/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/img' }),
(r'^css/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/css' }),
)
これまでのところ、2 つの解決策があります。
- urls.py を変更し、本番環境で実行する場合は「/myproj/」を含めます
request.build_absolute_uri()
views.py でリンクを作成するために使用するか、テンプレートで 'hostname:port/path' を含む変数を渡します
この問題に対処するためのより良い方法はありますか? ありがとうございました。
更新:まあ、問題は django ではなく、wsgi を構成する webfaction の方法にあるようです。URL「hostname.com/myapp」を持つアプリケーションの Apache 構成には、次の行が含まれています。
WSGIScriptAlias / /home/dreamiurg/webapps/pinfont/myproject.wsgi
したがって、SCRIPT_NAME は空です。私が見る唯一の解決策は、mod_python にアクセスするか、ルートからアプリケーションを提供することです。何か案は?