これまで(pk)
、アプリケーションのプロファイル URL の引数としてユーザー ID を使用してきました。最近username
、ユーザーIDの代わりにを使用することにしたので、次を変更しました:
Urls.py
# This was what i was using previously
url(r'^profile/(?P<uid>\d+)/$', 'app.views.user_profile', name="profile"),
# Changed the above to this.
url(r'^profile/(?P<username>[-\w\d]+)/$', 'app.views.user_profile', name="profile"),
Views.py
# Previous view
@login_required
def user_profile(request, uid):
user = get_object_or_404(models.User, pk=uid)
profile = helpers.get_profile(user)
render_to_response('profile.html', {'profile' : profile})
# Changed the above to
@login_required
def user_profile(request, username):
user = get_object_or_404(models.User, username=username)
profile = helpers.get_profile(user)
render_to_response('profile.html', {'profile' : profile})
今まではすべて良いです。127.0.0.1:8000/profile/some_username/
以前の代わりにアクセスしようとすると、127.0.0.1:8000/profile/some_number/
正常に動作します。
にツールバーがありprofile.html
、次のようなリンクが含まれています。
/profile/edit/
/profile/settings/
urls.py
これらの URL では、非常に単純なビューにマップされます。以下のような。
@login_required
def profile_settings(request):
"""
This view helpers.renders the profile's settings panel
"""
print 'hello'
rec, can = helpers.get_user_or_noprofile(request.user)
if not can is None:
gform = forms.CandidateGeneralSettingsForm(instance=can)
jsform = forms.CandidateJobSearchSettingsForm(instance=can)
data = {'candidate' : can, 'gform' : gform, 'jsform' : jsform }
else:
form = forms.RecruiterSettingsForm(instance=rec)
data = { 'recruiter' : rec, 'form' : form }
return helpers.render(request, 'profile_settings.html', data)
奇妙な部分はusername
、プロファイルの URL で使用するように変更した後です。ツールバーのいずれかのリンクをクリックするとすぐに、その404 : Error : No User matches the given query.
ページが表示されます。
デバッグするために、これらのビュー内にいくつかのデバッグ ステートメントを出力してみましたが、もっと奇妙なことがわかりました。ビュー内のコード全体にコメントを付けて、print ステートメントを書くだけでも、何も印刷されません。
login_required
これは、問題がデコレータにあるのではないかと疑っています。しかし、その場合は、訪問中にどのように機能していますか127.0.0.1:8000/profile/some_username/
。
これを引き起こしている可能性のあるものは何も考えられません。どんな助けでも大歓迎です。ありがとう。
PS: また、JFYI、ユーザーがユーザー名の代わりに電子メール アドレスを使用してログインできるカスタム電子メール認証バックエンドを使用しています。