0

プロジェクトのベース URL をすべてのテンプレートで使用するすべての URL に追加するために、何らかの方法で context_processor を追加する必要がないようにしています。

私の django プロジェクトはサブディレクトリ (foo と呼びましょう) の下にあり、テンプレート内の多くの URL は次のようになります。

<a href='/somepath'>whatever</a>

これは、ドメインのルートでホストされているプロジェクトでは問題なく機能しますが、この場合、サブディレクトリ foo の下にいるため、URL は実際には www.example.com/somepath を指します。

興味深いのは、管理サイトが正常に機能することです。その URL はすべて foo/admin/... を指しています。

これに対する答えを見つけるために正しい用語を探していないのではないかと思います。

.htaccess

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ foo.fcgi/$1 [L]

.fcgi

#!/usr/bin/python
import sys, os

# Current Path
cwd = os.path.join( os.path.dirname( os.path.abspath( __file__ ) ) )

# Activate current virtualenv
activate_this = os.path.join( cwd, 'bin', 'activate_this.py' )
execfile( activate_this, dict( __file__ = activate_this ) )

# Add a custom Python path.
sys.path.insert( 0, os.path.join( cwd, 'foo' ) )

os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

ほとんどの URL は {% url %} と FORCE_SCRIPT_NAME を使用して正しく動作させることができますが、urls.py に reverse() を使用するエントリがない URL については、それらのテンプレートの FORCE_SCRIPT_NAME 変数またはより良い方法はありますか?

4

1 に答える 1

0

これが私が問題を解決した方法です。これが最善の方法かどうかはわかりませんが、今のところはうまくいきます。

  1. サブディレクトリが何であれ、FORCE_SCRIPT_NAMEが設定されていることを確認してください
  2. settings.py と同じディレクトリ内に context_processors.py を作成しました
  3. CONTEXT_PROCESSORS の下の settings.py に context_processors.url_prefix を追加しました
  4. テンプレート内で {% url %} タグを使用できない場所では、先頭に {{ URL_PREFIX }} を追加します

context_processors.py

from django.conf import settings # import the settings file

def url_prefix(request):
    # return the value you want as a dictionnary. you may add multiple values in there.
    return {'URL_PREFIX': settings.FORCE_SCRIPT_NAME}

設定.py

CONTEXT_PROCESSORS = (
    ...,
    'context_processors.url_prefix',
)
于 2013-03-05T19:42:11.200 に答える