2

これまで(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、ユーザーがユーザー名の代わりに電子メール アドレスを使用してログインできるカスタム電子メール認証バックエンドを使用しています。

4

1 に答える 1

4

editは有効なユーザー名ではないため、機能しません。

この URLは に/profile/edit/一致^profile/(?P<username>[-\w\d]+)/$し、 にusernameなりeditます。

「edit」というユーザーがいないため、これuser = get_object_or_404(models.User, username=username)は失敗し、404.

についても同じです/profile/settings/

于 2012-12-26T09:02:04.520 に答える