django 在表单上载后尝试重定向用户时出现NoReverseMatch错误

oxf4rvwz  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(121)

我在Django中处理表单上传并成功保存表单后,尝试将用户重定向到一个新的URL时,遇到了NoReverseMatch错误。

@login_required
def profile(request):
    if request.method == 'POST':
        profile_form = UpdateProfileForm(request.POST, request.FILES, instance=request.user.profile)
        files = request.FILES.getlist('resume')
        resumes_data = []
        if profile_form.is_valid():
            for file in files:
                try:
                    # saving the file
                    resume = profile_form.cleaned_data['resume']

                    parser = ResumeParser(file.temporary_file_path())
                    data = parser.get_extracted_data()
                    resumes_data.append(data)
                    profile_form.instance.name = data.get('name')
                    profile_form.instance.email              = data.get('email')
                    profile_form.instance.mobile_number      = data.get('mobile_number')
                    if data.get('degree') is not None:
                        profile_form.instance.education      = ', '.join(data.get('degree'))
                    else:
                        profile_form.instance.education      = None
                        profile_form.instance.company_names      = data.get('company_names')
                        profile_form.instance.college_name       = data.get('college_name')
                        profile_form.instance.designation        = data.get('designation')
                        profile_form.instance.total_experience   = data.get('total_experience')
                    if data.get('skills') is not None:
                        profile_form.instance.skills         = ', '.join(data.get('skills'))
                    else:
                        profile_form.instance.skills         = None

                    if data.get('experience') is not None:
                        profile_form.instance.experience     = ', '.join(data.get('experience'))
                    else:
                        profile_form.instance.experience     = None
                    profile_form.save()
                    return redirect('users-profile')
                except IntegrityError:
                    messages.warning(request, 'Duplicate resume found')
                    return redirect('users-profile')
                
        profile_form.save()
        messages.success(request, 'Your profile is updated successfully')
        # return redirect(reverse('userprofile', kwargs={"id": request.user}))
        return redirect('userprofile')
    else:
        profile_form = UpdateProfileForm(instance=request.user.profile)

    return render(request, 'user/resumeprofile.html', {'profile_form': profile_form})

@login_required
def myprofile(request, user_id):
    profile = Profile.objects.get(id=user_id)
    context = {'profile':profile}
    return render(request, 'user/profile.html', context)

下面是我的urls.py

urlpatterns = [
    path('', jobs_views.home, name='home'),   #this is home function inside the views.py in the jobs folder
    path('contact',jobs_views.contact, name='contact'),
    # path('jobs/', jobs_views.job_list, name='job-list'),
    path('jobs/<slug:slug>', jobs_views.job_detail, name='job_detail'), #slug will help us identify the specific instance of job

    path('jobs-search/', jobs_views.job_search, name='job_search'),
    path('profile/', jobs_views.profile, name='users-profile'),
    path('userprofile/<int:user_id>',jobs_views.myprofile, name='userprofile')

]

当我将用户重定向到userprofile时发生错误,但当我将他们重定向到users-profile时没有收到任何错误。附件是显示的错误消息的屏幕截图。The Screenshot of the error
任何帮助都将不胜感激。

egmofgnx

egmofgnx1#

您可以通过从请求中获取用户ID来绕过它,因为他们需要登录。
urls.py路径中,将路径userprofile更改为:

path('userprofile/',jobs_views.myprofile, name='userprofile') # remove id parameter

然后在myprofile视图中,更改为:

@login_required
    def myprofile(request):
        user_id = request.user.id
        profile = Profile.objects.get(id=user_id)
        context = {'profile':profile}
        return render(request, 'user/profile.html', context)

相关问题