Python 使用Django(第一个应用程序)找不到页面(404)
我正在开发我的第一个django应用程序,我是一个编程新手,有时我真的不知道哪里有错误,教程和文档也帮不了我 错误是这样的: 现在,我为视图编写了代码:Python 使用Django(第一个应用程序)找不到页面(404),python,django,Python,Django,我正在开发我的第一个django应用程序,我是一个编程新手,有时我真的不知道哪里有错误,教程和文档也帮不了我 错误是这样的: 现在,我为视图编写了代码: def update(request, id): cliente = get_object_or_404(Cliente, id=id) if request.method == 'GET': form = clienteForm(instance=cliente) return redire
def update(request, id):
cliente = get_object_or_404(Cliente, id=id)
if request.method == 'GET':
form = clienteForm(instance=cliente)
return redirect("/clientepag/", id=id)
else:
form = clienteForm(request.POST, instance=cliente)
if form.is_valid():
form.save()
return redirect("/clientepag/", id=id)
else:
form = clienteForm()
return redirect("/clientepag/", id=id)
def clientepag(request, id):
cliente = Cliente.objects.get(id=id)
return render(request, 'clientepag.html', {'cliente': cliente})
我试图让我的更新函数将我重定向到clientepag/id,但我不明白为什么我的clientepag函数没有得到我从更新中发送的id,数据库正在更新,我验证了这一点,但是clientepag没有得到我从更新中发送的id,我不知道是否是更新没有发送id,或者是那些没有得到或拒绝它的客户
我已经验证了update函数在form.save()行之后仍然具有id
我的路径列表:
from django.contrib import admin
from django.urls import path
from clientesapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home),
path('clnt/', views.clnt),
path('view/', views.view),
path('clientepag/<int:id>', views.clientepag),
path('edit/<int:id>', views.edit),
path('delete/<int:id>', views.delete),
path('update/<int:id>', views.update)
]
来自django.contrib导入管理
从django.url导入路径
从客户机导入视图
URL模式=[
路径('admin/',admin.site.url),
路径(“”,视图。主页),
路径('clnt/',views.clnt),
路径('view/',views.view),
路径('clientepag/',views.clientepag),
路径('edit/',views.edit),
路径('delete/',views.delete),
路径('update/',views.update)
]
我知道答案一定很琐碎,但我真的无法理解错误可能在哪里。看来您的问题在于重定向:
return redirect("/clientepag/", id=id)
当您将URI(即,“/clientepag/”
)传递到redirect()
时,Django不会解析它,这意味着您传递给它的kwargs(id=id
)将被忽略
解决方案是从urlpatterns
传递视图名或路径名
例如,要在URL.py中命名路径:
path('clientepag/<int:id>', views.clientepag, name='clientepag'),
我认为问题在于代码中的返回重定向(“/clientepag/”,id=id),因为这里的id被忽略,因为您使用的是硬编码的url值,而不是下面的选项 在url.py文件中为clientepag url定义名称参数这是一个很好的做法,也有助于避免在代码中硬编码url: 将url更新为:
path('clientepag/<int:id>', views.clientepag, name='clientepag'),
return redirect(reverse('clientepag', kwargs = {
'id': form.instance.id
}))
有关重定向的更多选项,请参阅文档:
return redirect(reverse('clientepag', kwargs = {
'id': form.instance.id
}))