Django not Redirecting due to Page not Found Error

Question:

I am creating an edit profile function that updates the profile and redirects back to the profile page of the current user. Currently, the updating works fine, but the redirection is giving me a page not found error. Why is that happening?

url patterns:

urlpatterns = [
    path('change-profile/', users_views.change_profile, name='change_profile'),
    path('user/<str:username>/', UserProfileView.as_view(), name='user-profile'),
    ...
]

views.py

@login_required
def change_profile(request):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=request.user)
        p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, 'Profile Updated')
            return redirect('user-profile', {'username':request.user.username})
    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)
    context = {
        'u_form' : u_form,
        'p_form' : p_form
    }
    return render(request, 'users/change_profile.html', context)

Error messageenter image description here

Asked By: Raymond Li

||

Answers:

The redirect(…) function [Django-doc] uses named parameters, not a dictionary, so:

return redirect('user-profile', username=request.user.username)

You have sent {'username': 'TestPWRS' } as username, and (likely) there is no user with that username, only a user with username TestPWRS.

Answered By: Willem Van Onsem
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.