1

私のプロジェクトには次のミドルウェア設定があります。

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

ローカル開発でlocal_settings.pyは、ミドルウェア設定を次のように再定義するモジュールをセットアップします。

MIDDLEWARE_CLASSES = (
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)

ここでは、開発のために、キャッシュ関連のミドルウェアを削除しています。

私のApacheデプロイでは、(to )とdictをlocal_settings.py再定義するだけです。DEBUGFalseDATABASES

プロジェクトの本番仮想環境(Apacheサーバーが使用する仮想環境)にIPythonをインストールして、これを実行しました。

In [1]: from django.conf import settings

In [2]: settings.MIDDLEWARE_CLASSES
Out[2]: 
('django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware')

httpp://mysite.com/en/myview/しかし、これにもかかわらず、を使用するURLにアクセスするには、URLに言語識別子を(として)入力する必要がありますfrom django.conf.urls.i18n.i18n_patterns。そして、の機能の1つはdjango.middleware.locale.LocaleMiddleware、言語コードプレフィックスなしでローカライズされたビューにアクセスするときに、ユーザーエージェントヘッダーからそれを推測し、プレフィックス付きのビューにリダイレクトすることを正確に行うことです。

何が起こっているのかをデバッグする方法は?

4

2 に答える 2

3

私はそれを理解します(愚かな問題...)コードを見て、django.middleware.locale.LocaleMiddleware最初に応答ステータスコードが404(Not-Found)であるかどうかを調べ、次に言語コードのプレフィックスを付けて要求を再試行します。404.htmlしかし、そのコードが実行されることはありません...テンプレートを作成しなかった、例外を発生させたなどの理由で...

これはDEBUG = True、デバッグモードでは404.htmlテンプレートが使用されないため、が機能した理由も説明しています。

対応する404.htmlテンプレートを作成しただけで、すべてが正常に機能しました。

于 2012-07-14T19:52:10.877 に答える
2

同じ問題が発生しましたが、:handler_404ビューを指すようにurlconfでを定義しました。このビューはHttpResponseを返しましたがstatus_code = 200、404ではありません。したがって同じ問題が発生します。

于 2012-10-31T23:04:12.990 に答える