3

URL とビューの間の相互作用に問題があります。私のプロジェクトでは、リダイレクトと二重リダイレクトがあり、正常に動作していますが、正規表現によってキャプチャされたパラメーターを回復しようとすると、ターゲット ビューはパラメーターを受け取っていないと文句を言います。これは私の実装です:

プロジェクト/urls.py:

lang_re = r'(ca|en|es|fr|ge)'

urlpatterns = patterns('',
    url(r'^$', RedirectView.as_view(url='/en/home/')),
    url(r'^'+lang_re+'/home/', include('components.home.urls', namespace='components.home')),
    ...
)

コンポーネント/ホーム/urls.py:

urlpatterns = patterns('',
    url(r'^$', RedirectView.as_view(url='cover')),
    url(r'^cover$', views.cover, name='home_cover'),
    ...
)

コンポーネント/ホーム/views.py

def cover(request, lang_code):
    ...

たとえば、ルートに移動すると、「/en/home」にリダイレクトされます。これは 2 番目の正規表現に一致し (「en」の部分をパラメーターとしてキャプチャすることになっています)、その後、ユーザーは相対リダイレクトによって「/en/home/cover」に再度リダイレクトされます。この最後の URL は、最終的に永続的なビュー "components.home.views.cover" を見つけ、その機能を実行します。問題は、リダイレクト後にキャプチャされたパラメーター (「en」) が失われたように見え、Django から次のエラー メッセージが表示されることです。

Request Method: GET
Request URL: http://localhost:8000/en/home/cover
Django Version: 1.5.2
Exception Type: TypeError
Exception Value: cover() missing 1 required positional argument: 'lang_code'

リダイレクトとキャプチャされたパラメーターをどのように組み合わせることができるかについての手がかりはありますか?

4

1 に答える 1

2

正規表現では、ビュー メソッドに一致する名前付き引数がないため、この問題に直面しています。

この問題を修正するには:

lang_re = '(ca|en|es|fr|ge)'
url(r'^(?P<lang_code>'+lang_re+')/home/', include('components.home.urls', namespace='components.home')),

正規表現の引数名の一致について詳しくは、こちらをご覧ください

r''注:正規表現を囲む必要はありません。

于 2013-10-20T01:38:41.777 に答える