我正在执行更新功能,但收到一条消息找不到页面
views.py
def detalle_tarea(request, tarea_id):
if request.method == 'GET':
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(instance=tarea)
return render(request, 'tarea_detalles.html',
{'tarea': tarea, 'form': form})
else:
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(request.POST, instance=tarea)
form.save()
return redirect('tareas')
url.py
from django.contrib import admin
from django.urls import path
from tareas import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.inicio, name='inicio'),
path('registrar/', views.registrar, name='registrar'),
path('tareas/', views.tareas, name='tareas'),
path('tareas/crear/', views.crear_tarea, name='crear_tarea'),
path('tareas/<int:tarea_id>/', views.detalle_tarea, name='detalle_tarea')
]
有什么建议吗???
您的屏幕截图中的错误很可能是因为您在 HTML 模板中错误地指定了
action
中的 <form>
。
但是除了这个错误之外,您的代码中还有一些其他不清楚的地方需要解决。
首先,重复是不必要的——它根本毫无意义。 其次,您没有验证表单并立即开始保存它 - 这也可能导致不愉快的后果。
我会像这样重写你的视图函数:
def detalle_tarea(request, tarea_id):
# eliminating duplication
tarea = get_object_or_404(Tarea, pk=tarea_id)
if request.method == 'GET':
form = TareaForm(instance=tarea)
return render(request, 'tarea_detalles.html',
{'tarea': tarea, 'form': form})
else:
form = TareaForm(request.POST, instance=tarea)
if form.is_valid():
form.save()
return redirect('tareas')
else:
# for example
messages.error(request, "Validation error")
我还建议使用
print
或 logging
进行调试,这样您就可以了解您是否真正使用了视图函数以及您得到了什么 tarea_id
。
例如:
def detalle_tarea(request, tarea_id):
print(f'{tarea_id=}')