2016-06-15 1 views
1

私は、次のURL(loginが内蔵されている場合、ログインビュー機能django.contrib.auth.viewsから)持っている:、サイト上のすべてのページ上に存在するナビゲーションバーで、私のテンプレートに続いてDjangoのログインリダイレクトは私のURLパラメータを削除していますか?私のURLconfで

url(r'^login/', login, name='login', kwargs={ 
    'template_name': 'topspots/login.html', 
    'redirect_field_name': 'next', 
}) 

を私は次のログインのリンクがあります。

http://localhost:8000/login/?next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999 
:私はからログインページにアクセスすると、例えば、検索結果ページを

<li><a href="{% url 'login' %}?next={{ request.get_full_path }}">Log in</a></li> 

を、私はアドレスバーに取得するURLは次のようなものです

ログインした後、私は

http://localhost:8000/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999 

すなわち、nextパスにリダイレクトされたいので、(longitudelatitudeパラメータに注意してください)右私には思われます。ただし、ログインビューでは{{ next }}の値は/spots/search/?search_query=South Oak Park, KCMO, MO, United Statesになります。つまり、最初のパラメータを除くすべてのパラメータが削除されています。私はいつ/どこで/なぜこれらのパラメータが切り刻まれているのか把握できませんでした。これはジャンゴがやっていることですか、それとも私の間違いに由来していますか? Djangoの場合、正当な理由があると確信していますが、私が間違ったことをしているだけの場合は、修正したいと思います。助言がありますか?ありがとうございました!何が起こる

答えて

5

はあなたの生成されたURLがそうのように解析されてしまうということです。

next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States 
searchtype=default 
latitude=38.97600750000001 
longitude=-94.58623399999999 

追加のパラメータがnext URLのもはや一部であるので、彼らがドロップされます。それは一緒にとどまるので、これを回避するには、URL全体をエンコード:ブラウザは、もはやパラメータを分割して、間違ったURLに送信しますので、

<li><a href="{% url 'login' %}?next={{ request.get_full_path|urlencode }}">Log in</a></li> 

&文字はエンコードされません取得します。

Django documentation

+1

はい!私はそれがとてもシンプルなものだとは信じられない!これはおそらく自分が見つけたはずのものだったはずですが、よく知られていない技術を使っていると、どこを見るかわからないことがよくあります。正しい方向に私を指してくれてありがとう! – elethan

関連する問題