Django - 重定向时路径中的重复变量

Django - Repeated variable in path when redirecting

我试图将我的项目重定向到另一个页面以防出现验证错误,但由于某种原因,我得到了两次变量。

    context = {
        "job": Job.objects.get(id=job_id)
    }
    return render(request, "trip.html", context)

def update(request, job_id):
    errors = Job.objects.helper_validator(request.POST)
    print(errors)
    if len(errors) > 0:
        for key, value in errors.items():
            messages.error(request, value)
            return redirect(f'dashboard/{job_id}/update')
    else:
        job = Job.objects.get(id=job_id)
        job.title = request.POST["title"]
        job.desc = request.POST["desc"]
        job.location = request.POST["location"]
        job.save()
        return redirect("/dashboard/")
    path('dashboard/<int:job_id>/update', views.update),

错误:当前路径 dashboard/5/dashboard/5/update 与其中任何一个都不匹配。

只需在您的重定向功能中添加一个 / 即可。

return redirect(f'/dashboard/{job_id}/update')

最好为 URL 命名并使用 reverse 函数在代码中获取 URL。

from news import views

path('dashboard/<int:job_id>/update', views.update, name='dashboard')
return redirect(reverse('dashboard', args=[job_id]))

https://docs.djangoproject.com/en/3.1/ref/urlresolvers/#reverse

原因是您错误地使用了redirect函数: 所以不要使用这个:

return redirect(f'dashboard/{job_id}/update')

只需在 url 的开头添加 斜杠 ,如下所示:

return redirect(f'/dashboard/{job_id}/update')

重定向到特定 URL 的其他一些方法。

  1. 您可以为 url 模式 中的每个 view 定义一个特定的名称,例如:
 path('dashboard/<int:job_id>/update', views.update, name='dashboard'),

然后在您的 templates/views 中使用这个 view-name 用于有用的目的。像这样

return redirect('dashboard', job_id=job_id)

另一种方法是使用 django.urls.

中的 reverse
return redirect(reverse('dashboard', job_id=job_id)) # do the same job for you.